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
里面只是要求一个段错误....
任何提示?也许我正在解决这个问题?