获取没有嵌套表的XML段落

时间:2014-09-16 20:17:13

标签: xml r ncbi

我正在从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"

1 个答案:

答案 0 :(得分: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"

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