的XPath:选择文本节点

的XPath:选择文本节点

问题描述:

具有以下XML:的XPath:选择文本节点

<node>Text1<subnode/>text2</node> 

如何选择第一或通过XPath的第二个文本节点?

事情是这样的:

/node/text()[2] 
当然

不起作用,因为它是节点内的每个文本的合并结果。

+10

您写道:*`/ node/text()[2]`[...]不起作用,因为它是节点内每个文本的合并结果*这是错误的:它意味着*节点根元素*的第二个文本节点子节点。 **字符串值**(后代文本节点的连接)将是`string(/ node)` – 2011-02-17 20:11:31

+0

您的意思是说,Xpath查询应该工作?那么,我想我在别的地方还有其他问题。 ;) 谢谢! – kernel 2011-02-17 20:16:30

具有以下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