对此有很多疑问,但无法找到适合此数据格式的解决方案。感谢有关如何解析此问题的建议:
<XML>
<constituency hansard_id="5" id="uk.org.publicwhip/cons/1" fromdate="1918" todate="9999-12-31">
<name text="Aberavon"/>
</constituency>
<constituency hansard_id="6" id="uk.org.publicwhip/cons/2" fromdate="1997-05-01" todate="2005-05-04">
<name text="Aberdeen Central"/>
</constituency>
<constituency hansard_id="7" id="uk.org.publicwhip/cons/3" fromdate="1885" todate="9999-12-31">
<name text="Aberdeen North"/>
</constituency>
</XML>
所需的字段显然是c('hansard_id','id','fromdate','todate','name')
。读入并解析我尝试了以下内容:
require(XML)
> indata = htmlParse('data.xml', isHTML=F)
> class(indata)
[1] "XMLInternalDocument" "XMLAbstractDocument"
> print(indata)
<?xml version="1.0"?>
<XML>
<constituency hansard_id="5" id="uk.org.publicwhip/cons/1" fromdate="1918" todate="9999-12-31">
<name text="Aberavon"/>
</constituency>
<constituency hansard_id="6" id="uk.org.publicwhip/cons/2" fromdate="1997-05-01" todate="2005-05-04">
<name text="Aberdeen Central"/>
</constituency>
<constituency hansard_id="7" id="uk.org.publicwhip/cons/3" fromdate="1885" todate="9999-12-31">
<name text="Aberdeen North"/>
</constituency>
</XML>
> xmlToDataFrame(indata, stringsAsFactors=F)
name
1
2
3
它正在读取,但是xmlToDataFrame
无法处理格式。是因为数据是'constituency'标签元素的属性吗?非常感谢任何指导。
答案 0 :(得分:2)
您是正确的xmlToDataFrame
仅访问XML
个节点。对于给定节点,xmlAttrs
函数将返回该节点属性。 xpathApply
函数使用解析的xml文档doc
说并向其应用xpath
以获取一组节点。然后将这些节点中的每一个应用于用户定义的功能。 xpath
"//*/constituency"
将返回文档中的所有constituency
个节点。然后,我们可以将xmlAttrs
函数应用于每个函数:
res <- xpathApply(doc, "//*/constituency", xmlAttrs)
这将返回一个属性列表。我们想将这些绑定在一起,例如:
rbind.data.frame(res[[1]], res[[2]], ...)
将第一个和第二个,第三个......属性集绑定到data.frame中。这样做的一个简单方法是在属性列表中使用do.call
函数:
do.call(rbind.data.frame, res)
将行绑定应用于列表中的所有元素。