对于在下面看到的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>
有人能帮助我解决这个相当小的烦人的问题吗?