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 に答える