XPath:选择文本节点

ker*_*nel 140 xml xpath selection

拥有以下XML:

<node>Text1<subnode/>text2</node>
Run Code Online (Sandbox Code Playgroud)

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

像这样的东西:

/node/text()[2]
Run Code Online (Sandbox Code Playgroud)

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

Dim*_*hev 172

拥有以下XML:

<node>Text1<subnode/>text2</node> 
Run Code Online (Sandbox Code Playgroud)

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

用途:

/node/text()
Run Code Online (Sandbox Code Playgroud)

这将选择XML文档的顶部元素(名为"node")的所有文本节点子节点.

/node/text()[1]
Run Code Online (Sandbox Code Playgroud)

这将选择XML文档的顶部元素(名为"node")的第一个文本节点子节点.

/node/text()[2]
Run Code Online (Sandbox Code Playgroud)

这将选择XML文档的顶部元素(名为"node")的第二个文本节点子节点.

/node/text()[someInteger]
Run Code Online (Sandbox Code Playgroud)

这将选择XML文档的顶部元素(名为"node")的someInteger-th文本节点子节点.它等效于以下XPath表达式:

/node/text()[position() = someInteger]
Run Code Online (Sandbox Code Playgroud)

  • @AaronGillion,是的,AFAIK PHP有一个正确工作的XPath 1.0评估.请注意,`/ html/text()`不会选择文档中的所有文本节点 - 只有顶部`html`元素的子节点(不是后代)的文本节点.你可能想要`/ html // text()`.为了构造XPath表达式,通常需要对XPath有一些了解和理解. (2认同)

kad*_*tai 27

你的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
Run Code Online (Sandbox Code Playgroud)