2009-12-11 5 views
1

Мы хотели бы реализовать проверки существования элементов через выражение XPath. Выражения XPath определяются извне. Мы пытаемся использовать метод расширения XPathEvaluate из System.Xml.XPath, но он жалуется, когда мы пытаемся сделать следующее.Возвращение логического выражения из выражения XPath

XDocument d = new XDocument(
       new XElement("test", 
        new XElement("element"), 
        new XElement("element"))); 
bool b = (bool)d.XPathEvaluate("/test/element[exists()]"); 

Эта функция в настоящее время завершается с исключением «пространство имен диспетчера или XsltContext необходимо. Этот запрос имеет префикс, переменная или определяемой пользователем функции.». Мы получаем то же сообщение, если попробуем exists(/test/element).

Одной из других вещей, которые мы хотели бы выразить в выражении XPath, является количество элементов, например. count(/text/element) = 2.

Условие тестирования должно быть частью выражения XPath.

Вызов функции d.XPathEvaluate("/test/element[last()]") оценивается в соответствии с ожиданиями.

Возможно ли использовать XPathEvaluate таким образом?

[изменить] Да.

Если нет, есть ли какие-либо альтернативы в инфраструктуре .Net?

[изменить] Да.

[Изменить] Оставшийся вопрос: почему функция exists не работает?

ответ

2

После нескольких экспериментов, похоже, я ответил на свой вопрос.

Конечно, вы можете сделать count(/test/element) > 0 как существующий чек. (И мы смотрели на это с тремя людьми :-()

bool b = (bool)d.XPathEvaluate("count(/test/element) > 0"); 
4

Вы пробовали XPath:

boolean(/test/element) 
+0

Не раньше, а просто протестировано и оно работает. –

0

Оставшийся вопрос: почему не существует функция работы

Вы вызываете функцию существует() неправильно. The exists() function needs at least one argument.

Вместо того, чтобы использовать его в предиката для выражения XPATH, используя выражение XPATH в качестве параметрадля существует() функции.

bool b = (bool)d.XPathEvaluate("exists(/test/element)"); 
+0

Мы уже пробовали это с тем же результатом. Это отмечено в моем вопросе. –

Смежные вопросы