R:使用xpath过滤节点

时间:2016-07-26 17:42:06

标签: r parsing xpath xml2

我正在尝试用R解析一个html文档。我想要抓取一个节点,但在节点内有一些我不需要的信息。

例如:

<div class="content">
 <h3>Titel</h3>
 <p>content</p>
 <p>content</p>
 <ul>
  <li>List</li>
  <li>List</li>
 </ul>
</div>

我想要所有内容和列表。我不需要标题。通常我会用这段代码抓住它:

grabIt <- xml_text(xml_find_all(html, xpath="//div[@class='content']//text()
                       [not(ancestor-or-self::div[@class='content']//h3)]"))

这通常可行。但是在这里“[not(祖先或自我)-Line过滤掉所有内容。我认为它是因为我在我试图抓取的节点中过滤掉了一些内容。代码在这些实例中正常工作,其中标题或者我不需要的任何其他信息都在这样的单独节点中:

<div class="content">
 <div class="Titel">Title</div>  #difference
 <p>content</p>
 <p>content</p>
 <ul>
  <li>List</li>
  <li>List</li>
 </ul>
</div>

我得到的另一个想法是:

grabIt <- xml_text(xml_find_all(html, xpath="//div[@class='content']//p//text()"))

但问题是,我不能同时抓住段落和列表。

1 个答案:

答案 0 :(得分:1)

试试这个xpath:

//div[@class='content']/*[not(name()='h3')][name()='p']/text() | //div[@class='content']/*[not(name()='h3')]/*[name()='li']/text()

它给出了:

'content'
'content'
'List'
'List'