我有三个文本节点样本,我想使用通用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 Games
或New Line Cinema
或NetherRealm Studios
请注意,文本节点总是只包含一个公司,而不是两个或三个(只有一个)。
我的尝试来自this question,但问题在于它不起作用,也不包括所有三家公司。
substring('Midway Games',1,12*contains(//p[@class='product-summary']/following-sibling::text()[1], 'Midway Games'))
答案 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处理器将查询该元素下面的(连接的)文本节点。