我试图选择第二个 node()
但是 only if 它是一个文本节点 .
<p><span>Span text</span> plain text</p>
我已经尝试了 /p/node()[2]/text()
,但这并不是第二个节点内的文本节点't work because there isn' . /p/node()[1]/text()
给 'Span text'
和 /p/text()[1]
给 ' plain text'
但它应该使用 [2]
而不是 [1]
. 我可以't work out how you specify a text predicate after you'选择了节点 .
我想要的结果是这样的:
NodeList {
length => 2,
0 => Node('<span>Span text</span>'),
1 => Text(' plain text')
}
其中第一个节点必须是 span
,第二个节点必须是纯文本 . 优选地,不应该匹配任何内容,如果文本节点丢失,则它不应与 span
节点匹配 .
/p/node()[1]|/p/node()[2]
在输入良好时返回我想要的内容,但它也会返回我的要求之外的匹配项 . 例如:
<p>Bad match <span>Span text</span> plain text</p>
会返回 'Bad match '
为 node()[1]
. 此无效匹配示例应返回以下内容:
NodeList {
length => 0
}
1 回答
这样的事情怎么样:
这将选择
<p>
,第二个子节点等于文本子节点 . 然后,您可以通过选择<p>
的任何所需子项来继续路径,例如: