使用xpathSApply解析XML文件,R v3.1.1,XML v3.98-1.1

时间:2014-08-14 19:11:44

标签: xml r

我正在尝试解析R中的以下XML文件:http://reports.ieso.ca/public/GenOutputCapability/PUB_GenOutputCapability_20140517_v24.xml

到目前为止,我的脚本很简单:

file <- "http://reports.ieso.ca/public/GenOutputCapability/PUB_GenOutputCapability_20140517_v24.xml"
doc <- xmlTreeParse(file, useInternal=TRUE)
rootNode <- xmlRoot(doc)
xpathSApply(rootNode, "//GeneratorName", xmlValue)

每当我运行它时,我的输出只是一个空列表。

将其用于其他XML文件,我可以提取值没问题,但对于这个特定的文件,我无法提取任何内容。我已经尝试了许多不同的节点,大写,使用useInternal = FALSE,以及我可以做的任何其他组合,但仍然没有运气。

我可以使用rootNode [[“IMODocBody”]] [[“Date”]]语法访问部件以获取日期,例如,因此我知道文件已加载。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

您需要使用适当的命名空间:

> head(xpathSApply(doc, "//ns:GeneratorName", xmlValue
                   , namespaces = c(ns = "http://www.theIMO.com/schema")))
[1] "BRUCEA-G1" "BRUCEA-G2" "BRUCEA-G3" "BRUCEA-G4" "BRUCEB-G5" "BRUCEB-G6"

请参阅?xmlNamespaceDefinitions

> xmlNamespaceDefinitions(doc)
[[1]]
$id
[1] ""

$uri
[1] "http://www.theIMO.com/schema"

$local
[1] TRUE

attr(,"class")
[1] "XMLNamespaceDefinition"

$xsi
$id
[1] "xsi"

$uri
[1] "http://www.w3.org/2001/XMLSchema-instance"

$local
[1] TRUE

attr(,"class")
[1] "XMLNamespaceDefinition"

attr(,"class")
[1] "XMLNamespaceDefinitions"