具有以下 XML:
<node>Text1<subnode/>text2</node>
如何通过 XPath 选择第一个或第二个文本节点?
像这样的东西:
/node/text()[2]
当然不起作用,因为它是节点内每个文本的合并结果。
/node/text()[2]
[...] 不起作用,因为它是节点内每个文本的合并结果 这是错误的:它意味着 node
根的第二个文本节点子节点元素。 字符串值(后代文本节点的串联)将是 string(/node)
具有以下 XML:
利用:
/node/text()
这将选择 XML 文档的顶部元素(名为“节点”)的所有文本节点子节点。
/node/text()[1]
这将选择 XML 文档的顶部元素(名为“节点”)的第一个文本节点子节点。
/node/text()[2]
这将选择 XML 文档顶部元素(名为“节点”)的第二个文本节点子节点。
/node/text()[someInteger]
这将选择 XML 文档的顶部元素(名为“节点”)的第 someInteger 文本节点子节点。它等价于以下 XPath 表达式:
/node/text()[position() = someInteger]
你的 xpath 应该可以工作。我已经在 MarkLogic 和 Zorba Xquery/Xpath 实现中测试了你的 xpath 和我的 xpath。
两者都应该工作。
/node/child::text()[1] - should return Text1
/node/child::text()[2] - should return text2
/node/text()[1] - should return Text1
/node/text()[2] - should return text2
不定期副业成功案例分享
//*[text()]
。/html/text()
不起作用。/html/text()
不会选择文档中的所有文本节点,只选择顶部html
元素的子节点(不是后代)的文本节点。您可能想要/html//text()
。为了构建 XPath 表达式,通常需要一些 XPath 知识和理解。