我正在尝试定位未找到标签的数据(除了包含p的所有内容)
<p>
<strong>id1:</strong>data1<br />
data2<br />
<strong>id3:</strong>data3<br />
<strong>id4:</strong>data4
</p>
<p>
<strong>id1:</strong>data1<br />
data2<br />
<strong>id3:</strong>data3
</p>
有关如何获取data1,data2和data3以及能够唯一识别它们的任何建议(例如data3跟在strong[.='id3:']
之后并在<br/>
之前结束)
编辑:在<br/>
之后,data2始终跟随data1
感谢
答案 0 :(得分:3)
要查找紧跟<strong>id1</strong>
之后的文本节点,请使用strong[.='id1']/following-sibling::text()[1]
(将p元素作为上下文节点)。
这假设你知道会有这样一个文本节点。更严格的测试是strong[.='id1']/following-sibling::node()[1][self::text()]
,它将在强元素之后找到第一个节点(任何类型),并返回它,前提是它是一个文本节点。
在您的示例中,您不清楚如何识别data2。
答案 1 :(得分:2)
只需使用:
p/text()
这将选择作为当前节点的子元素的p
个元素的子节点的所有文本节点。
或者,如果您要排除仅限空格的文本节点,请使用:
p/text()[normalize-space()]
如果您只想选择第n个此类文本节点,请使用:
p/text()[normalize-space()][1]
p/text()[normalize-space()][2]
。 。 。 。 。 。 。 。 。
直到
p/text()[normalize-space()][$k]
其中$k
是此类节点的总数:
count(p/text()[normalize-space()])
答案 2 :(得分:0)
可以使用text()提取。
对于ex,下面的xpath给出了所需的结果
// P /文本()