web-dev-qa-db-ja.com

属性が存在しないときにノードを選択するXpathクエリ?

特定の属性が存在しないノードを選択したい。 Not()関数を試しましたが、機能しません。これには方法がありますか?

例:次のXpathクエリ:

group/msg[not(@owner)]

最初のノードを取得する必要がありますが、2番目のノードは取得しません。ただし、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

26
Antoine

一部の古い、あまり標準的でないXPathエンジンでは、同じ理由でstring-length(@attr)=0を使用する必要がありました。

17
Jonas Elfström

XPath ExplorerJaxen ライブラリに基づく)でテストするときに私にとってはうまくいきます。
それは確かにXPath実装に依存していると思います。

1
PhiLho