解析XML文件并返回R字符向量

Zac*_*ach 8 xml r

我用R解析了一个XML文档,例如:

library(XML)
f = system.file("exampleData", "mtcars.xml", package="XML")
doc = xmlParse(f)
Run Code Online (Sandbox Code Playgroud)

使用XPath表达式,我可以选择文档中的特定节点:

> getNodeSet(doc, "//record[@id='Mazda RX4']/text()")
[[1]]
   21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4 

    attr(,"class")
    [1] "XMLNodeSet"
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何将结果转换为R字符向量:

> as.character(getNodeSet(doc, "//record[@id='Mazda RX4']/text()"))
[1] "<pointer: 0x000000000e6a7fe0>"
Run Code Online (Sandbox Code Playgroud)

如何从内部指针获取文本到C对象?

Tyl*_*ker 5

使用xmlValue.这是您的示例的扩展,以帮助您查看类是什么:

v <- getNodeSet(doc, "//record[@id='Mazda RX4']/text()")
str(v)
#List of 1
#$ :Classes 'XMLInternalTextNode', 'XMLInternalNode', 'XMLAbstractNode' <externalptr> 
#- attr(*, "class")= chr "XMLNodeSet"
v2 <- sapply(v, xmlValue)  #this is the code chunk of interest to you
v2
#[1] "   21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4"
str(v2)
#chr "   21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4"
Run Code Online (Sandbox Code Playgroud)