我有这个XML:
<test>
<a>
abc
<xyz />
def
<br />
ghi jkl
<br />
mno pqr
</a>
<a>
xxx
</a>
</test>
在每个<a>
我需要选择所有子节点(甚至是文本),直到第一个<br />
。如果没有<br />
,我需要选择给定<a>
中的所有子节点。所以预期的结果是:
abc
<xyz />
def
和
xxx
我可以在<br />
&#34;之前选择所有内容。像这样:
//a/*[following::br]
...但它会在 last <br />
之前选择所有内容。我需要在第一个之前选择所有内容。我试过这样的话:
//a/*[following::br[1]]
...与之前的结果相同。这些也不会选择&#34;非<br />
&#34;中的节点。 <a>
秒。
如何使用(可单一的)XPath表达式执行此操作?感谢您的任何建议。
答案 0 :(得分:6)
您可以尝试这种方式(格式化以便于阅读):
//a/node()[
following-sibling::br[not(preceding-sibling::br)]
or
not(../br)
]
有关正在使用的谓词表达式([]
的内容)的简要说明:
following-sibling::br[not(preceding-sibling::br)]
:当第一个true
之前的相应节点表示为&#34;时,评估为<br/>
没有前任兄弟<br>
&#34; -
<br/>
not(../br)
:当父true
没有任何孩子<a>
<br/>