如何在R中获取特定节点值

时间:2016-05-17 03:32:33

标签: xml r parsing xml-parsing

如何使用R访问XML文件的特定节点的值?我是R的新手,也想知道为什么xmltop[[1]]$IP返回null。我做错了什么?

xmlfile <- xmlTreeParse("E:\\R Scripts\\Data\\Ipdata.xml")
xmltop = xmlRoot(xmlfile)
xmltop[[1]]$IP    # return a null value
xmlValue(xmltop[[1]]$IP)    # returns NA

XML:

<Response>
<location>
 <IP>213.139.122.103</IP>
 <CountryCode>FR</CountryCode>
 <CountryName>France</CountryName>
 <RegionCode/>
 <RegionName/>
 <City/>
 <ZipCode/>
 <TimeZone>Europe/Paris</TimeZone>
 <Latitude>48.86</Latitude>
 <Longitude>2.35</Longitude>
 <MetroCode>0</MetroCode>
 </location>
 <location>
 <IP>213.139.122.102</IP>
 <CountryCode>INR</CountryCode>
 <CountryName>India</CountryName>
 <RegionCode/>
 <RegionName/>
 <City/>
 <ZipCode/>
 <TimeZone>Chennai</TimeZone>
 <Latitude>48.83</Latitude>
 <Longitude>2.34</Longitude>
 <MetroCode>0</MetroCode>
 </location>
</Response>

2 个答案:

答案 0 :(得分:1)

可以使用xmltop[[1]][[1]][[1]]xmlValue(xmltop[[1]][[1]])xmltop[[1]][["IP"]][1]$text进行访问。根据节点,这些不是名称。

我建议您使用此代码将其转换为数据框或列表

数据框:

xmldataframe <- xmlToDataFrame("E:\\R Scripts\\Data\\Ipdata.xml", stringsAsFactors=FALSE)

xmldataframe$IP[1]

列表:

xmllist <- xmlToList("E:\\R Scripts\\Data\\Ipdata.xml")

xmllist[[1]]$IP

答案 1 :(得分:1)

您可以通过以下命令访问它:

xmltop[[1]][["IP"]]

更好的是,您可以尝试使用XPATHxpathApplyxpathSApply命令访问所有IP代码:

xpathApply(xmltop, "//IP")

然后,您可以使用xmlValue

等功能从这些节点中提取信息
xpathApply(xmltop, "//IP", xmlValue)

编辑:您需要修改原始代码(将对象转换为XMLInternalNode)以使用xmlValue等函数,如下所示:

xmlfile <- xmlTreeParse("Ipdata.xml", useInternalNodes = T)