2008-12-12 4 views
26

Я хочу выбрать узлы, для которых не существует определенного атрибута. Я пробовал функцию Not(), но она не работает. Есть ли способ для этого?Запрос Xpath для выбора узла, когда атрибут не существует?

Пример: Ниже Xpath запроса:

group/msg[not(@owner)] 

В случае получения первого узла, но не второй один. Тем не менее, как SketchPath (инструмент для проверки запросов Xpath), так и мой код C# считают, что 2 узла в порядке.

<group> 
    <msg id="EVENTDATA_CCFLOADED_XMLCONTEXT" numericId="14026" translate="False" topicId="302" status="translated" > 
     <text>Context</text> 
     <comment></comment> 
    </msg> 
    <msg id="EVENTDATA_CCFLOADED_XMLCONTEXT_HELP" numericId="14027" translate="False" topicId="302" status="translated" owner="EVENTDATA_CCFLOADED_XMLCONTEXT" > 
     <text>Provides the new data displayed in the Object.</text> 
     <comment></comment> 
    </msg> 
</group> 

На самом деле функция Not() работает правильно, это просто, что у меня были другие условия и скобки не были правильно установлены. errare humanum est.

+1

Если это так, пожалуйста, ЗАКРЫВАЙТЕ вопрос - это вводит в заблуждение и требует много времени для других людей. – 2008-12-12 16:40:34

+0

Я закрыл вопрос как «больше не актуальный», если вы не возражаете. – PhiLho 2008-12-12 20:20:04

ответ

17

В некоторых старых и не очень стандартных двигателях XPath мне приходилось использовать string-length(@attr)=0 по той же причине.

1

Работает для меня при тестировании XPath Explorer (на основе библиотеки Jaxen).
Итак, я думаю, что это действительно зависит от реализации XPath.