Xpath - 从一个文本节点中提取文本字符串的多个特定不同部分

时间:2014-02-09 17:49:00

标签: xpath

我有三个文本节点样本,我想使用通用x路径提取文本的三个不同部分。

第一

<p class="product-summary">
                This is an amazing game from the company Midway Games. Excellent gameplay. Very good game.
            </p>

第二

<p class="product-summary">
                New Line Cinema distributed this movie in 1995.
            </p>

第三

<p class="product-summary">
                New game from 2011, with new 3D graphics. This game was made by NetherRealm Studios.  
            </p>

提取应为Midway GamesNew Line CinemaNetherRealm Studios 请注意,文本节点总是只包含一个公司,而不是两个或三个(只有一个)。

我的尝试来自this question,但问题在于它不起作用,也不包括所有三家公司。

substring('Midway Games',1,12*contains(//p[@class='product-summary']/following-sibling::text()[1], 'Midway Games'))

1 个答案:

答案 0 :(得分:1)

由于输入只包含其中一个,您可以使用concat加入结果。

concat(
  substring('Midway Games', 1,
      12*contains(//p[@class='product-summary'], 'Midway Games')),
  substring('Line Cinema', 1,
      11*contains(//p[@class='product-summary'], 'Line Cinema')),
  substring('NetherRealm Studios', 1,
      19*contains(//p[@class='product-summary'], 'NetherRealm Studios'))
)

您可以根据需要删除我为了可读性添加的换行符。

我必须修复您提供的查询:文本节点不是following-sibling,而是子节点。无论如何,当contains处理字符串时,您的XPath处理器将查询该元素下面的(连接的)文本节点。