如何使用xml2排除节点

时间:2018-02-15 16:46:58

标签: r xml xpath xml2

过去几天我一直在寻找,我在XPath v2中看到你可以使用'除了'运营商,但是还没有能够弄清楚xml2如何处理这个问题。

这个链接有点像我想要做的,但这是XPath特有的,我试图全面排除节点like in this SO answer

例如,我的测试文档是.docx,我解压缩并阅读。它有正文和表格。我想阅读所有正文,除了表格中的任何内容。我可以阅读两者,但我无法弄清楚如何排除所有w:tbl。任何notexcept运营商似乎都无法运作。

使用xml_find_all,它会毫无例外地擦除这些节点中的任何内容。

bodytext <- xml2::xml_find_all(doc, "//w:p")
tabletext <- xml2::xml_find_all(doc, "//w:tbl")

1 个答案:

答案 0 :(得分:1)

您在此处查询所有现有w:p,但w:tbl包含w:p的实例 - 以下仅选择位于正文中的段落:

xml2::xml_find_all(doc, "//w:body/w:p")

请注意,要浏览docx的内容,您可以使用officer::docx_summary(officer::read_docx('/path/to/document.docx'))来返回包含内容,索引等的data.frame,如下所示。

  doc_index content_type style_name             text level num_id
1         1    paragraph       <NA>                     NA     NA
2         2    paragraph  heading 1 Table of content    NA     NA
3         3    paragraph       <NA>                     NA     NA
4         4    paragraph  heading 2     dataset iris    NA     NA