首页 > 解决方案 > 转换为数据框时的 xml2 命名空间/xpath 问题

问题描述

我正在尝试使用 .xml 将 xml 文档转换为平面数据框xml2

这是一些示例代码,删除了架构部分。我正在尝试提取所有“事件”节点:

library(xml2)

test_xml <- as_xml_document(
'<Root>
  <xs:schema xmlns="address.com" xmlns:mstns="address.com" id="id">
  </xs:schema>
    <NewDataSet xmlns="address.com">
      <Events>
        <VAR1>3119496</VAR1>
        <VAR2>3119496</VAR2>
        <VAR3>text</VAR3>
      </Events>
      <Events>
        <VAR1>3119496</VAR1>
        <VAR2>3119496</VAR2>
        <VAR3>text</VAR3>
      </Events>
    </NewDataSet>
</Root>'
)

这是我使用 RStudio 时的照片read_xml("file_path") %>% View()

基于,我希望类似以下的工作......

xml_df <- test_xml %>%
    xml_child(2) %>%
    xml_find_all("//Events") %>% 
    map_df(~ { xml_attrs(.x) %>% as.list() } ) 

...但事实并非如此。我的猜测是问题出在我的 xpath 中xml_find_all,但我不确定。任何帮助将非常感激!

编辑:鉴于第一个答案不起作用(在我添加到命名空间之前),我猜测新示例中的命名空间会导致问题。

标签: rxmlxml2

解决方案


也许您正在寻找这样的东西:

test_xml %>% 
  xml_find_all(xpath = "//Events") %>% 
  as_list() %>% 
  lapply(function(x) as.data.frame(t(unlist(x)))) %>% 
  {do.call(rbind, .)}

#>      VAR1    VAR2
#> 1 3119496 3119496
#> 2 3119496 3119496

推荐阅读