特定の属性が存在しないノードを選択したい。 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。
一部の古い、あまり標準的でないXPathエンジンでは、同じ理由でstring-length(@attr)=0
を使用する必要がありました。
XPath Explorer ( Jaxen ライブラリに基づく)でテストするときに私にとってはうまくいきます。
それは確かにXPath実装に依存していると思います。