2010-11-01 90 views
2

在这里选择文本:如何使用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 
+0

问得好,+1。请参阅我的答案以获取解释和XPath 2.0解决方案。 – 2010-11-01 17:58:11

回答

1

我将如何消毒下面的话从文本:

Alpha 
Charlie 
Echo 

所以,我在本示例中仅结束以下文字:

Bravo Delta 

这不能在XPath 1.0中完成 - 您需要使用主机语言获取文本并在其中进行替换。

在XPath 2.0可以使用replace()功能

replace(replace(replace($vText, ' Alpha ', ''), ' Charlie ', ''), ' Echo ') 
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'))],' ') 
+0

+1一个很好的答案 – 2010-11-01 18:28:02

相关问题