2
問題上着手子集從XML文檔中的R的最佳方式XPath查詢的節點的子集對
想象我有一個XML文件,它在中間部分的結構是這樣的地方:
<A>
<B> 1 </B>
<C> 2 </C>
<D> 3 </D>
<E> lots of other stuff, child nodes, etc </E>
</A>
<A>
<B> 5 </B>
<C> 6 </C>
<D> 7 </D>
<E> lots of other stuff </E>
</A>
<A>
<B> 1 </B>
<D> 2 </D>
<E> lots of other stuff </E>
</A>
我想創建一個表,其中每個節點A
有一行,其中B
和C
值的列。
我不能只是做
Bs <- xpathSApply(doc, "//x:B", xmlValue, namespaces="x")
Cs <- xpathSApply(doc, "//x:C", xmlValue, namespaces="x")
data.frame(Bs, Cs)
由於某些節點缺少「C」元素,因此這些載體將是不同的長度和在一般不對齊。
相反,我可以這樣做:
N <- getNodeSet(doc, "//x:A", namespaces="x")
Bs <- sapply(N, function(x) xmlValue(x[["B"]])
Cs <- sapply(N, function(x) xmlValue(x[["C"]])
它是沒問題,當兩個節點的深度相同,但如果節點C是一些長期的XPath表達式內心深處節點A.人們可能會認爲不一概而論我可以只sapply
在XPath的呼叫相反,
Cs <- sapply(N, xpathSApply, "<some_xpath_xpr>", xmlValue))
但你瞧!這完全不符合我們的想法--xpathSApply每次訪問整個xmlInternalDocument
,而不僅僅是它給出的xml節點。試圖遵循子集文檔中所示的伎倆,
N1 = xmlDoc(N[[1]])
xpathSApply(N1, ...)
free(N1)
的sapply
裏面只是要求一個段錯誤....
任何提示?也許我正在解決這個問題?