如何使用XPath过滤选定文本中的某些单词?

时间:2010-11-01 17:41:24

标签: xpath

选择此处的文字:

     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&amp;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

2 个答案:

答案 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 ')