我得到了以下 XML 内容
<root>
<node1>Hi from node 1</node1>
text not encapsulated in node
<node2>Hi from node 2</node2>
<node3>content....<node3/>
</root>
Run Code Online (Sandbox Code Playgroud)
问题是:如何获取node3之前的所有内容,甚至那些未使用XPath版本1.0或2.0封装在节点中的内容?
这个 XPath,
/root/node3/preceding-sibling::node()
Run Code Online (Sandbox Code Playgroud)
将选择所有节点,而不仅仅是元素,作为node3
兄弟节点:
<node1>Hi from node 1</node1>
text not encapsulated in node
<node2>Hi from node 2</node2>
Run Code Online (Sandbox Code Playgroud)
如果您确实想要所有先前同级节点的内容,请参阅@DanielHaley 的很好的答案,或使用(也可以使用 XPath 2.0):
/root/node3/preceding-sibling::node()/string()
Run Code Online (Sandbox Code Playgroud)
产量:
Hi from node 1
text not encapsulated in node
Hi from node 2
Run Code Online (Sandbox Code Playgroud)
使用normalize-space()
代替string()
来规范化空白:
Hi from node 1 text not encapsulated in node Hi from node 2
Run Code Online (Sandbox Code Playgroud)
请注意,这些返回多个字符串(可能在上下文中连接),而 Daniel Haley 的 XPath 表达式将直接返回单个字符串,这可能更直接是您想要的。