如何使用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>
答案 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"]]
更好的是,您可以尝试使用XPATH
到xpathApply
或xpathSApply
命令访问所有IP
代码:
xpathApply(xmltop, "//IP")
然后,您可以使用xmlValue
:
xpathApply(xmltop, "//IP", xmlValue)
编辑:您需要修改原始代码(将对象转换为XMLInternalNode
)以使用xmlValue
等函数,如下所示:
xmlfile <- xmlTreeParse("Ipdata.xml", useInternalNodes = T)