如何使用 xml2 排除节点
How to exclude a node using xml2
过去几天我四处搜索,发现在 XPath v2 中可以使用 'except' 运算符,但一直无法弄清楚 xml2 如何处理这个问题。
这 link 是我想要做的,但这是特定于 XPath 的,我正在尝试完全排除节点 like in this SO answer.
例如,我的测试文档是.docx
,我解压并阅读了它。它有正文和 table。我想阅读所有正文,除了 table 中的任何内容。我可以阅读两者,但我不知道如何排除所有 w:tbl
。任何 not
或 except
运算符似乎都不起作用。
使用 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
过去几天我四处搜索,发现在 XPath v2 中可以使用 'except' 运算符,但一直无法弄清楚 xml2 如何处理这个问题。
这 link 是我想要做的,但这是特定于 XPath 的,我正在尝试完全排除节点 like in this SO answer.
例如,我的测试文档是.docx
,我解压并阅读了它。它有正文和 table。我想阅读所有正文,除了 table 中的任何内容。我可以阅读两者,但我不知道如何排除所有 w:tbl
。任何 not
或 except
运算符似乎都不起作用。
使用 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