Xpath:查找标签中未包含的数据

时间:2011-02-07 05:36:02

标签: xpath xquery

我正在尝试定位未找到标签的数据(除了包含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 感谢

3 个答案:

答案 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 /文本()