我的问题是我的XPATH规则无法正常工作。我希望它选择DataFile元素属性Filename不是“thing.xml”的所有XML。我还添加了示例XML,以便于理解。
这是我的XPATH规则:
/document[transport/sender[code='12345678'] and metaxml/LetterMetaData[Type='invoice'] and SignedDoc/DataFile[@Filename!='thing.xml']]
这是我想要 XPATH规则忽略的XML:
<document>
<transport>
<sender>
<code>12345678</code>
</sender>
</transport>
<metaxml>
<LetterMetaData>
<Type>invoice</Type>
</LetterMetaData>
</metaxml>
<SignedDoc>
<DataFile Filename="thing.xml">...</DataFile>
</SignedDoc>
</document>
这是我想要的XPATH规则不要忽视:
<document>
<transport>
<sender>
<code>12345678</code>
</sender>
</transport>
<metaxml>
<LetterMetaData>
<Type>invoice</Type>
</LetterMetaData>
</metaxml>
<SignedDoc>
<DataFile Filename="file_with_other_name_than_thing.xml">...</DataFile>
</SignedDoc>
</document>
答案 0 :(得分:0)
哪个是根节点(/
)的子节点?如果您的文档格式正确,则不应为document
,并且您的XPath正在评估为空。例如,以下XPath:
/docs/document[SignedDoc/DataFile[not(@Filename!='thing.xml')]]
应用于此输入:
<docs>
<document>
<transport>
<sender>
<code>12345678</code>
</sender>
</transport>
<metaxml>
<LetterMetaData>
<Type>invoice</Type>
</LetterMetaData>
</metaxml>
<SignedDoc>
<DataFile Filename="thing.xml">...</DataFile>
</SignedDoc>
</document>
<document>
<transport>
<sender>
<code>12345678</code>
</sender>
</transport>
<metaxml>
<LetterMetaData>
<Type>invoice</Type>
</LetterMetaData>
</metaxml>
<SignedDoc>
<DataFile Filename="file_with_other_name_than_thing.xml">...</DataFile>
</SignedDoc>
</document>
</docs>
仅返回第二个文档节点。请注意,root的子项为docs
。
如果您不想从根目录开始选择,则应使用//
:
//document[SignedDoc/DataFile[not(@Filename!='thing.xml')]]