我有这个XML:
<test>
<a>
abc
<xyz />
def
<br />
ghi jkl
<br />
mno pqr
</a>
<a>
xxx
</a>
</test>
Run Code Online (Sandbox Code Playgroud)
在每个<a>
我需要选择所有子节点(甚至文本),直到第一个<br />
.如果没有<br />
,我需要选择给定的所有子节点<a>
.所以预期的结果是:
abc
<xyz />
def
Run Code Online (Sandbox Code Playgroud)
和
xxx
Run Code Online (Sandbox Code Playgroud)
我可以<br />
像这样选择"之前的一切":
//a/*[following::br]
Run Code Online (Sandbox Code Playgroud)
...但它会在最后一个 之前选择所有内容<br />
.我需要在第一个之前选择所有内容.我试过这样的:
//a/*[following::br[1]]
Run Code Online (Sandbox Code Playgroud)
......与以前的结果相同.这些也不选择"非<br />
"中<a>
的节点.
我怎样才能使用(可单一的)XPath表达式?谢谢你的任何建议.
您可以尝试这种方式(格式化为可读性):
//a/node()[
following-sibling::br[not(preceding-sibling::br)]
or
not(../br)
]
Run Code Online (Sandbox Code Playgroud)
关于[]
正在使用的谓词表达式(内容)的简要说明:
following-sibling::br[not(preceding-sibling::br)]
:评估true
当第一个表示<br/>
为" <br>
没有前一个兄弟<br/>
"之前的相应节点时-
not(../br)
:评估true
父母<a>
没有任何孩子的时间<br/>
归档时间: |
|
查看次数: |
827 次 |
最近记录: |