R从子元素中选择XML属性并生成数据框

时间:2019-03-06 21:39:49

标签: r xml

对于在下面看到的XML结构,如何在R数据框中将元素的子元素做成行并将它们的属性做成列,我简直无法理解。

当元素在根中时,我知道该怎么做。喜欢:

data <- getURL(url) %>%
  xmlTreeParse(., useInternal = TRUE) %>%
  xmlRoot()
doc <- XML::xmlToList(data)
nodes <- grep("SubChild2_1", names(data))
out <- data.frame(do.call(rbind, lapply(nodes, function(x) doc[[x]])), stringsAsFactors = FALSE)

为此:

<Child1 filename="stuff" datetimecreated="date stuff" datetimeimported="stuff" stuffi="s" >
  <SubChild1_1 attri1="attri1v" attri2="attri2v" />
  <SubChild2_1 IMPODATE="2019-02-22" IMPOVALUE="1" IMPOVALUE2="123.35" IMPOVALUE3="12.85" />
  <SubChild2_1 IMPODATE="2019-02-22" IMPOVALUE="2" IMPOVALUE2="654.35" IMPOVALUE3="23.85" />
  <SubChild2_1 IMPODATE="2019-02-22" IMPOVALUE="3" IMPOVALUE2="789.35" IMPOVALUE3="34.85" />
</Child1>

但是我很难弄清楚如何像这样一步地进入xmltree:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<response xmlns="http://www.xx.com/abc/def" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xx.com/abc/def http://www.xx.com/abc/def.xsd" status="1" timestamp="2019-03-06T20:24:14">
 <Child1 filename="stuff" datetimecreated="date stuff" datetimeimported="stuff" stuffi="s" >
  <SubChild1_1 attri1="attri1v" attri2="attri2v" />
  <SubChild2_1 IMPODATE="2019-02-22" IMPOVALUE="1" IMPOVALUE2="123.35" IMPOVALUE3="12.85" />
  <SubChild2_1 IMPODATE="2019-02-22" IMPOVALUE="2" IMPOVALUE2="654.35" IMPOVALUE3="23.85" />
  <SubChild2_1 IMPODATE="2019-02-22" IMPOVALUE="3" IMPOVALUE2="789.35" IMPOVALUE3="34.85" />
 </Child1>
</response>

有人能帮助我解决这个相当小的烦人的问题吗?

0 个答案:

没有答案