Parse XML files with subnodes of the same name

前端 未结 1 717
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-01-21 14:27

I have an XML file - brief version below


  
    2
    

        
相关标签:
1条回答
  • 2021-01-21 15:04

    Here is a solution based on this question/answer: R XML - combining parent and child nodes(w same name) into data frame

    library(xml2)
    library(dplyr)
    page<-read_xml('<resultset>
      <row>
             <column name="indexpatient">2</column>
             <column name="height" null="true"></column>
             <column name="ParameterMeasure">Cardiac/MM/Dimension/LVIDd</column>
             <column name="ParameterId">MM/LVIDd</column>
             <column name="ResultIdentifier">Average</column>
             <column name="ResultValue">0.05617021151</column>
             </row>
             <row>
             <column name="indexpatient">2</column>
             <column name="height" null="true"></column>
             <column name="ParameterMeasure">Cardiac/MM/Dimension/LVIDd</column>
             <column name="ParameterId">MM/LVIDs</column>
             <column name="ResultIdentifier">Measurement No. 1</column>
             <column name="ResultValue">0.05341702</column>
             </row>
             </resultset>')
    
    
    rows<- page %>% xml_find_all('//row') 
    
    dfs<-lapply(rows, function(node){
       #find the attr value from all child nodes
       names<-node %>% xml_children() %>% xml_attr("name")  
       #find all values
       values<-node %>% xml_children() %>% xml_text()
    
       #create data frame and properly label the columns
       df<-data.frame(t(values), stringsAsFactors = FALSE)
       names(df)<-names
       df
    })
    
    #bind together and add uid to final dataframe.
    answer<-bind_rows(dfs)
    answer
    
    # indexpatient height           ParameterMeasure ParameterId  ResultIdentifier   ResultValue
    # 1            2        Cardiac/MM/Dimension/LVIDd    MM/LVIDd           Average 0.05617021151
    # 2            2        Cardiac/MM/Dimension/LVIDd    MM/LVIDs Measurement No. 1    0.05341702
    > 
    
    0 讨论(0)
提交回复
热议问题