2

我正在从 PubMed Central 解析 XML 文档,有时我会找到带有嵌套表的段落,如下例所示。R中有没有办法获取文本并排除表格?

doc <- xmlParse("<sec><p>Text</p>
  <p><em>More</em> text<table>
   <tr><td>SKIP</td><td>this</td></tr>
  </table></p>
 </sec>")

xpathSApply(doc, "//sec/p", xmlValue)
[1] "Text"              "More textSKIPthis"

我想返回没有嵌套表行的段落。

[1] "Text"      "More text"
4

1 回答 1

3

您可以删除不需要的节点。在这个例子中,我删除了 XPATH 给出的节点//sec/p/table

library(XML)
doc <- xmlParse("<sec><p>Text</p>
  <p>More text<table>
   <tr><td>SKIP</td><td>this</td></tr>
                </table></p>
                </sec>")


xpathSApply(doc, "//sec/p/table", removeNodes)
xpathSApply(doc, "//sec/p", xmlValue)
[1] "Text"      "More text"

如果您想保持doc完整,您还可以考虑:

library(XML)
doc <- xmlParse("<sec><p>Text</p>
  <p>More text<table>
   <tr><td>SKIP</td><td>this</td></tr>
                </table></p>
                </sec>")
> xpathSApply(doc, "//sec/p/node()[not(self::table)]", xmlValue)
[1] "Text"      "More text"

或者简单地说:

xpathSApply(doc, "//sec/p/text()", xmlValue)
[1] "Text"      "More text"

哪个最好取决于您现实世界案例的复杂性。

于 2014-09-16T20:31:35.937 回答