XPath选择innertext

时间:2010-10-06 13:24:06

标签: c# html text xpath

我有这个HTML / XML:

\t\t\t\t\t    \r\n\t\t
<a href="/test.aspx">
  <span class=test>
    <b>blabla</b>
  </span>
</a>
<br/>
this is the text I want
<br/>
<span class="test">
  <b>code: 123</b>
</span>
<br/>
<span class="test"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t

在C#4中,我使用HtmlAgilityPack lib选择带有XPath的Node并获取InnerText属性。这将获得节点内的所有文本。我怎样才能得到“这是我想要的文字”这个文字?

/text()仅返回\t\t\t\t\t \r\n\t\t

3 个答案:

答案 0 :(得分:11)

/div/text()

从给出的示例中,这个XPath将获得div元素下面的所有文本节点,在本例中为test2。

如果您可以详细说明问题,我们可以更好地为您提供帮助。 Div包含3个子元素:span元素,文本节点和b元素。 span和b每个都有一个文本节点子节点。使用XPath,您可以只选择元素(/ div / *),仅选择文本节点(/ div / text())或所有节点类型(/ div / node())。

编辑:/ text()只返回根级文本节点。在这种情况下,我希望它返回一个包含3个文本节点的节点列表:

\t\t\t\t\t    \r\n\t\t 
this is the text I want
\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t

您是否只选择结果节点列表中的第一个节点? 有一些格式良好的问题,例如<br>应该是<br/>

答案 1 :(得分:1)

@peter:您不应该编辑您的问题,以便人们看不到接受的答案与问题的关系 !!!

您的新问题的答案:

/br[1]/following-sibling::text()[1]

选择想要的文本节点(引号是我的):

"   
this is the text I want   
"

答案 2 :(得分:0)

  

我怎样才能得到“这是   我想要的文字“?

text()[preceding-sibling::node()[1][self::br]]
      [following-sibling::node()[1][self::br]]

含义:两个br元素之间的文本节点。