【发布时间】:2019-07-10 00:43:33
【问题描述】:
我正在使用一个供应商的产品,它以 .udf 文件格式生成一些有趣的 XML 导出。我的目标是能够将 XML 项的层次结构存储在数据框中。
项目是我们在产品内部的文件夹结构中构建的东西。每个项目中的Name 是我们为文件夹指定的名称或我们正在创建的事物的名称(XML 将它们全部称为“项目”,无论它是我们正在创建的事物还是只是一个文件夹)。
这是一个 XML 示例。假设有一个未知的文件夹数,最终会有一个我想要捕获的名称和定义,它设置了我想要在我的数据框中的行数:
<Root>
<Items>
<Item Id="2148" Type="Category" Name="Group 1">
<Item Id="2148" Type="Category" Name="SubGroup A">
<Item Id="2347" Type="Category" Name="Name1"> [Definition of Name 1] </Item>
<Item Id="2348" Type="Category" Name="Name2"> [Definition of Name 2] </Item>
</Item>
<Item Id="2148" Type="Category" Name="SubGroup A">
<Item Id="2347" Type="Category" Name="Name1"> [Definition of Name 1] </Item>
<Item Id="2348" Type="Category" Name="Name2"> [Definition of Name 2] </Item>
</Item>
</Item>
</Items>
我希望数据框看起来像这样,其中会有 v1 - vN,具体取决于子文件夹的数量。一个足够好的解决方案是只选择一些子文件夹级别并假设没有更多(不超过 5 个级别,但需要处理更少)。
v1 <- "Group 1"
v2 <- c("SubGroup A", "SubGroup B")
name <- c("Name1", "Name2", "Name 3", "Name4")
definition <- "Definition of name"
df <- tibble::as_tibble(cbind(v1, v2, name, definition))
我可以使用xml2 包为每件事获取一行,其中有一列显示“Root.Items.Item.Item”,但无法从这些父节点中提取信息。
【问题讨论】:
-
你想把它们全部作为一个数据框吗?
-
最终是的。我想将此层次结构与另一个层次结构(另一个数据框)进行比较,检查文件夹结构是否相同。