У меня есть функция библиотеки, которая выглядит, как показано нижеИспользование XPathNavigator ответа выберите XPathExpression конкатенацией константа
private static string Parse(XPathNavigator xNav, XPathExpression xPathExpression)
{
string result = string.Empty;
XPathNodeIterator xpathIterator = xNav.Select(xPathExpression.Clone());
while (xpathIterator.MoveNext())
{
result = result + xpathIterator.Current.TypedValue + "#";
}
return result;
}
И есть XML-файл, который будет выглядеть, как показано ниже
<Account account_no ="100">
<Name>Hello</Name>
</Account>
Теперь мне нужно написать xpath, который возвратит account_no, конкатенирующую некоторую константу
Я написал код примерно как
XPathDocument doc = new XPathDocument(@"..\..\test.xml", XmlSpace.Default);
XPathNavigator xNav = doc.CreateNavigator();
string xpath = "concat('Account No', /Account/@account_no)";
XPathExpression xPathExpression = XPathExpression.Compile(xpath);
string result = Parse(xNav, xPathExpression);
Результат, который я ожидаю, это account_no, префикс которого он содержит некоторую текстовую константу. Поэтому я написал xpath как concat ('Account No',/Account/@ account_no). Но это не сработало, не удалось в xNav.Select(). Пожалуйста, помогите мне, как написать правильный xpath, чтобы получить требуемый результат. У меня нет свободы вносить изменения в функцию синтаксического анализа, что бы я ни делал, я должен делать только с строкой xpath.
спасибо.
я не могу вносить изменения в Разобрать() метод. Это часть какой-то другой общей библиотеки. Только я могу играть с выражением xpath ... :( –
В этом случае это невозможно сделать только с выражением XPath, потому что XPathNavigator.Select() работает только с путями выбора узлов. Вы можете это сделать: 'string xPath = "/ Account/@ account_no"; result = "Account No" + Parse (xNav, XPathExpression.Compile (xPath)). TrimEnd ('#'); ' – JLRishe