选择此处的文字:
Alpha Bravo Charlie Delta Echo Foxtrot
来自这个HTML结构:
<div id="entry-2" class="item-asset asset hentry">
<div class="asset-header">
<h2 class="asset-name entry-title">
<a rel="bookmark" href="http://blahblah.com/politics-democrat">Pelosi Q&A</a>
</h2>
</div>
<div class="asset-content entry-content">
<div class="asset-body">
<p>Alpha Bravo Charlie Delta Echo Foxtrot</p>
</div>
</div>
</div>
我应用以下XPath表达式来选择asset-body
中的文本:
//div[contains(
div/h2[
contains(concat(' ',@class,' '),' asset-name ')
and
contains(concat(' ',@class,' '),' entry-title ')
]/a[@rel='bookmark']/@href
,'democrat')
]/div/div[
contains(concat(' ',@class,' '),' asset-body ')
]//text()
我如何清理文字中的以下字词:
Alpha
Charlie
Echo
因此,我最终只得到此示例中的以下文字:
Bravo Delta
答案 0 :(得分:3)
使用XPath 1.0假设独特的NMTokens:
concat(substring-before(concat(' ',$Node,' '),' Alpha '),
substring-after(concat(' ',$Node,' '),' Alpha '))
正如您所看到的,这变得非常冗长(和糟糕的表现)。
使用XPath 2.0:
string-join(tokenize($Node,' ')[not(.=('Alpha','Charlie','Echo'))],' ')
答案 1 :(得分:1)
我如何清理文本中的以下字词:
Alpha
Charlie
Echo
所以我最终只得到了这个例子中的以下文字:
Bravo Delta
仅在XPath 1.0中无法完成 - 您需要以宿主语言获取文本并在那里进行替换。
在XPath 2.0中,可以使用replace()
函数:
replace(replace(replace($vText, ' Alpha ', ''), ' Charlie ', ''), ' Echo ')