如何使用 xml2 排除节点

How to exclude a node using xml2

过去几天我四处搜索,发现在 XPath v2 中可以使用 'except' 运算符,但一直无法弄清楚 xml2 如何处理这个问题。

这 link 是我想要做的,但这是特定于 XPath 的,我正在尝试完全排除节点 like in this SO answer.

例如,我的测试文档是.docx,我解压并阅读了它。它有正文和 table。我想阅读所有正文,除了 table 中的任何内容。我可以阅读两者,但我不知道如何排除所有 w:tbl。任何 notexcept 运算符似乎都不起作用。

使用 xml_find_all 它会毫无例外地抓取这些节点内的任何内容。

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

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

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

请注意,要浏览 docx 的内容,您可以使用 officer::docx_summary(officer::read_docx('/path/to/document.docx')),它将 return 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