Подтвердить что ты не робот

Запрос Xpath для выбора node, когда атрибут не существует?

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

Пример: Следующий запрос Xpath:

group/msg[not(@owner)]

Должен извлечь первый node, но не второй. Тем не менее, как SketchPath (инструмент для проверки запросов Xpath), так и мой код С# считают, что 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.

4b9b3361

Ответ 1

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

Ответ 2

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