如何将多个嵌套的XML元素转换为一个数据框?

时间:2019-04-11 02:05:55

标签: r xml xml2

我正在尝试将XML文件转换为准备好放入CSV文件的数据框。不幸的是,我似乎无法包括多个较低的级别。

此文件的严重缩减版本是:

<Products Count="14790" >
<Product xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <FundCode>MyCompany</FundCode>
    <HospitalCover BasedOnID="">
        <HospitalTier>SilverPlus</HospitalTier>
        <Age Available="true" AvailableTransfer="true" />
        <MedicalServices>
            <MedicalService Title="Item1" Cover="Covered" />
            <MedicalService Title="Item2" Cover="NotCovered" />
        </MedicalServices>
    </HospitalCover>
    </Product>
</Products>

下面是对我来说最成功的代码,但是我不知道如何深入到xml中以从较低级别获取数据,目前,它只是将来自较低级别的数据归为一列

xmlfile <- xmlTreeParse("test_import.xml")
topxml <- xmlRoot(xmlfile)
head(topxml)
topxml <- xmlSApply(topxml,
                    function(x) xmlSApply(x, xmlValue))

xml_df <- data.frame(t(topxml),
                     row.names=NULL)
xml_df <- apply(xml_df,2,as.character)

write.csv(xml_df, "test_export.csv")

是我最接近的

我尝试过使用xpath尝试将列手动映射到特定标签,但是我也找不到任何元素

> a <- read_xml("test_import.xml")
> xml_find_all(a, xpath = "//Product")
{xml_nodeset (0)}

我想要的是一个类似以下内容的数据框:

FundCode   HospitalTier   Age Available  AvailableTransfer   Item1     Item2
MyCompany  SilverPlus     True           True                Covered   NotCovered

0 个答案:

没有答案