2015-08-29 98 views
1

我從following file檢索信息,使用所述XML 在R.我檢索一組表的節點,然後希望進一步使用xpathApply每個節點上R:XML:故障遍歷節點集

doc = htmlParse(file.link) 
tableNodes = getNodeSet(doc, "//table") 

for(i in 1:length(tableNodes)){ 
    print(xpathApply(tableNodes[[i]],"//tr[1]/td[1]",xmlValue)) 
} 

這應該返回文件中每個表格的左上角元素,但由於某些原因,每次迭代都會返回第一個表格的左上角元素。也就是說,對於每一個我,我都會得到;

"事業所名(所在地)" 

相反,它應該返回;

i=1: "事業所名(所在地)" 
i=2: "會社名事業所名(主な所在地)" 
i=3: "會社名(所在地)" 
... 

this post,我也嘗試過使用sapply,但得到了類似的結果 - 僅僅從第一個表中的條目返回。

sapply(tableNodes, function(x) { xpathApply(x,"//tr[1]/td[1]",xmlValue) }) 

當我打印的每個節點到控制檯,不同的表返回,但任何想法,爲什麼我看到這種行爲?我需要做什麼額外的步驟才能返回所需的輸出?

回答

2

問題是您的查詢中的主要//,這意味着從根開始的XML文檔中的任何位置。見xpath expression

這裏是一個例子。

​​
+0

解決此問題的另一種方法是由包的作者提出的,它使用上下文節點的語法; '.// TR [1]/TD [1]'。 – JSB