我要选择的东西是1到N的同类型节点嵌套的子节点。xml看起来像这样:
<Folder>
<Folder>
<Folder>
<Folder>
<File></File>
</Folder>
</Folder>
</Folder>
</Folder>
或
<Folder>
<File></File>
</Folder>
我选择的文件必须是文件夹的子文件夹,这些文件夹中没有一个可以有任何其他的文件夹作为祖先。我不想使用后代来获取所有文件,只是为了检查它们的每个祖先。我宁愿遵循文件夹链,然后在文件夹后的任何文件直接停止。类似regex的+是我要找的(./Folder+/File)但我不知道它是否存在
XPath没有"重复轴"结构;您需要使用XPath轴和谓词条件的组合来实现您想要的结果。
下面是一个表达式,它获取Folder
元素的所有File
元素的子元素,然后检查Folder
元素的祖先是否都是Folder
元素:
//Folder/File[fn:not(ancestor::*/fn:local-name(.) != "Folder")]