【问题标题】:Convert specific node of XML to CSV with R使用 R 将 XML 的特定节点转换为 CSV
【发布时间】:2020-05-22 14:19:44
【问题描述】:

我有这样的 XML 文件

<Item>
    <Tab1>
        <Info1>x<Info1>
        <Info2>y<Info2>
        <Info3>z<Info3>
    </Tab1>
    <Tab2>
        <Info1>foo<Info1>
        <Info2>bar<Info2>
        <Info3>foobar<Info3>
    </Tab2>
</Item>
<Item>
    <Tab1>
        <Info1>x<Info1>
        <Info2>y<Info2>
        <Info3>z<Info3>
    </Tab1>
    <Tab2>
        <Info1>foo<Info1>
        <Info2>bar<Info2>
        <Info3>foobar<Info3>
    </Tab2>
</Item>

使用此代码

file <- "file.xml"
doc <- xmlParse(file, useInternalNodes = TRUE) 
xmldataframe <- xmlToDataFrame(doc)

我得到的数据框看起来像这样

Tab1              Tab2
xyz               foobarfoobar

但我只需要单独列中的 Tab2 信息。我怎样才能得到以下结果?

Info1 Info2 Info3
foo   bar   foobar

【问题讨论】:

  • 请确定您用于解析 XML 的包。

标签: r xml csv dataframe


【解决方案1】:

您需要先修复您的示例 XML(它目前无效),但鉴于您有一个有效的 XML 文档,您可以使用 xpath 提取特定节点。 您似乎正在使用 XML 包(有助于在问题中指定这一点),因此您需要函数 XML::getNodeSet

file <- "file.xml"
doc <- XML::xmlParse(file, useInternalNodes = TRUE)
tab2 <- XML::getNodeSet(doc, "//Tab2")
xmldataframe <- XML::xmlToDataFrame(tab2)

这只会提供您正在寻找的节点。

> xmldataframe
  Info1 Info2  Info3
1   foo   bar foobar
2   foo   bar foobar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多