2016-05-17 16 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はXMLテキストまたはファイルへのパスです。ここで、 'xml'はXMLテキストまたはファイルへのパスです。%xml%>%read_xml()%>%xml_find_all( '// IP')%>%xml_text()' – alistaire

+0

@kumar私の答えはあなたの質問を解決しましたか?はいの場合は、受け入れてupvoteします。 – khrm

+0

xmltop [[1]] [["IP"]]はあなたにIPだけを与えません。それはあなたにノードを与えるでしょう。 – khrm

答えて

1

あなたは、このコマンドでアクセスすることができます

私はあなたがこのコード

データフレームを使用してデータフレームやリストに変換することをお勧めします

xmltop[[1]][["IP"]] 
xpathApply(xmltop, "//IP", xmlValue) 

EDIT:あなたは、このようなxmlValueなどの機能でこれらのノードから情報を抽出することができます

xpathApply(xmltop, "//IP") 

:さらに良いことに、あなたはすべてのIPタグにアクセスするためにxpathApplyxpathSApplyコマンドでXPATHを使用しようとすることができます:xmlValueのような関数を使用するには、元のコードをlit30ビット(XMLInternalNodeに変換)に変更する必要があります。

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ようこそ。しかし、私の答えが最初であったので、少なくとも私の答えをupvoteすることができます。 – khrm

関連する問題