2016-05-17 43 views
1

如何使用R訪問XML文件的特定節點的值?我是R新手,也想知道爲什麼xmltop[[1]]$IP返回null。我究竟做錯了什麼?如何獲得R中的特定節點值

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

['xml2'](https://github.com/hadley/xml2)對於解析非常好,但您需要[XPath技巧](http://www.w3schools.com/xsl /xpath_syntax.asp)。如果你想要所有''節點的文本內容,'library(xml2); xml%>%read_xml()%>%xml_find_all('// IP')%>%xml_text()'其中'xml'是XML文本或文件的路徑。 – alistaire

+0

@kumar我的答案解決了您的查詢嗎?如果是的話,那麼接受並點贊。 – khrm

+0

xmltop [[1]] [[「IP」]]不會僅爲您提供IP。它會給你節點。 – khrm

回答

1

您可以通過這個命令來訪問它:

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

更妙的是,你可以嘗試使用XPATH通過xpathApplyxpathSApply命令來訪問所有IP標籤:

xpathApply(xmltop, "//IP", xmlValue) 

編輯:

xpathApply(xmltop, "//IP") 

然後你可以從這些節點與功能,如xmlValue提取信息:您需要修改您的原始代碼一點點(將對象轉換爲XMLInternalNode)以使用xmlValue等功能,如下所示:

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

感謝這非常有幫助 – kumar

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

非常感謝,如果我能將兩者都標記爲答案,這非常有幫助。 – kumar

+0

@kumar歡迎。但是,我的答案是第一位的,你至少可以贊成我的答案。 – khrm

相關問題