如何将XML中具有相同名称的多个节点转换为R中的df/list?

如何将XML中具有相同名称的多个节点转换为R中的df/list?,xml,r,Xml,R,这是我第一次使用R处理XML。因此,我的问题可能听起来很幼稚,如果不是愚蠢的话。。。 我下载了一个XML文件,格式为 <experiment> <sampleattribute> <category>AGE</category> <value>8</value> <value>10</value> <value>11</value> &l

这是我第一次使用R处理XML。因此,我的问题可能听起来很幼稚,如果不是愚蠢的话。。。 我下载了一个XML文件,格式为

<experiment>
  <sampleattribute>
    <category>AGE</category>
    <value>8</value>
    <value>10</value>
    <value>11</value>
  </sampleattribute>
  <sampleattribute>
    <category>SEX</category>
    <value>female</value>
    <value>male</value>
  </sampleattribute>
</experiment>
<experiment>
  <sampleattribute>
    <category>DESIGN</category>
    <value>control</value>
    <value>disease</value>
  </sampleattribute>
</experiment>
<experiment>
  <sampleattribute>
    <category>AGE</category>
    <value>8</value>
    <value>10</value>
    <value>11</value>
  </sampleattribute>
  <sampleattribute>
    <category>SEX</category>
    <value>female</value>
  </sampleattribute>
  <sampleattribute>
    <category>DESIGN</category>
    <value>control</value>
    <value>disease</value>
  </sampleattribute>
</experiment>

年龄
8.
10
11
性
女性的
男性的
设计
控制
病
年龄
8.
10
11
性
女性的
设计
控制
病
如您所见,每个实验节点都有不同的sampleattribute。我希望以一种最终将其转换为数据帧的方式连接每个实验中的所有sampleattribute


我试过attr你不能用这样的XML获得一个
dataframe
,而是一个列表

使用
XML
包,您可以执行以下操作,例如:

doc = htmlParse(txt,asText=TRUE)

res = lapply(xpathSApply(doc,'//experiment'),
       function(x){
         category = xpathSApply(x,'sampleattribute/category',xmlValue)
         values = xpathSApply(x,'sampleattribute/value',xmlValue)
         list(category=category,
              values =values)
       })
然后您可以检查您的结果:

 str(res)
 List of 3
 $ :List of 2
  ..$ category: chr [1:2] "AGE" "SEX"
  ..$ values  : chr [1:5] "8" "10" "11" "female" ...
 $ :List of 2
  ..$ category: chr "DESIGN"
  ..$ values  : chr [1:2] "control" "disease"
 $ :List of 2
  ..$ category: chr [1:3] "AGE" "SEX" "DESIGN"
  ..$ values  : chr [1:6] "8" "10" "11" "female" ..

谢谢但同样的问题仍然存在,无法追溯前2个属于节点1,后3个属于节点3。预期的输出是什么?