的XPath:选择文本节点
问题描述:
具有以下XML:的XPath:选择文本节点
<node>Text1<subnode/>text2</node>
如何选择第一或通过XPath的第二个文本节点?
事情是这样的:
/node/text()[2]
当然
不起作用,因为它是节点内的每个文本的合并结果。
答
具有以下XML:
<node>Text1<subnode/>text2</node>
如何选择第一或 通过XPath的第二个文本节点?
使用:
/node/text()
这将选择顶级元素(名为 “节点”)的XML文档中的所有文本节点孩子。
/node/text()[1]
这将选择XML文档顶部元素(名为“节点”)的第一个文本节点子元素。
/node/text()[2]
这将选择XML文档的顶层元素(名为“节点”)的第二个文本节点子元素。
/node/text()[someInteger]
这将选择XML文档顶部元素(名为“节点”)的someInteger-th文本节点子元素。它相当于以下XPath表达式:
/node/text()[position() = someInteger]
答
你的xpath应该可以工作。我已经在MarkLogic和Zorba Xquery/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
您写道:*`/ node/text()[2]`[...]不起作用,因为它是节点内每个文本的合并结果*这是错误的:它意味着*节点根元素*的第二个文本节点子节点。 **字符串值**(后代文本节点的连接)将是`string(/ node)` – 2011-02-17 20:11:31
您的意思是说,Xpath查询应该工作?那么,我想我在别的地方还有其他问题。 ;) 谢谢! – kernel 2011-02-17 20:16:30