Как преобразовать несколько вложенных элементов XML в кадр данных? - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь преобразовать файл 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
...