gpt4 book ai didi

xml - 在 R XML 包中,xmlParse 和 xmlTreeParse 有什么区别?

转载 作者:数据小太阳 更新时间:2023-10-29 01:41:41 24 4
gpt4 key购买 nike

我什么时候想使用 xmlParse 函数而不是 xmlTreeParse 函数?此外,参数值 useInternalNodes=TRUEasText=TRUE 何时有用?

例如:

library("XML")
nct_url <- "http://clinicaltrials.gov/ct2/show/NCT00112281?resultsxml=true"
xml_doc <- xmlParse(nct_url, useInternalNodes=TRUE)

对比

doc <- xmlTreeParse(getURL(nct_url), useInternalNodes=TRUE)
top <- xmlRoot(doc)
top[["keyword"]]
xmlValue(top[["start_date"]])
xmlValue(top[["location"]])

人们似乎使用 xmlTreeParse 函数通过 $doc$children$... 遍历获取非重复节点。但我不确定我是否了解每种方法何时最佳。解析 XML 是几乎放弃 R 而学习 Python 的原因之一。缺乏无需强制购买书籍的傻瓜示例。

最佳答案

这里是使用XML包后的一些反馈。

  • xmlParsexmlTreeParse 的一个版本,其中参数 useInternalNodes 设置为 TRUE。
  • 如果您想获得一个 R 对象,请使用 xmlTreeParse。如果您只想提取 xml 文档的一部分,这可能不是很有效且不必要。
  • 如果您不想获取 R 对象,而只想获取 c 指针,请使用 xmlParse。但是您应该知道一些 xpath 基础来操作结果。
  • 如果输入的是文本而不是文件或 url,请使用 asText=TRUE

这里是一个例子,我展示了这两个函数之间的区别:

txt <- "<doc>
<el> aa </el>
</doc>"
library(XML)
res <- xmlParse(txt,asText=TRUE)
res.tree <- xmlTreeParse(txt,asText=TRUE)

现在检查 2 个对象:

class(res)
[1] "XMLInternalDocument" "XMLAbstractDocument"
> class(res.tree)
[1] "XMLDocument" "XMLAbstractDocument"

您看到 res 是一个内部文档。它是指向 C 对象的指针。res.tree 是一个 R 对象。你可以像这样得到它的属性:

 res.tree$doc$children
$doc
<doc>
<el>aa</el>
</doc>

对于 res,您应该使用有效的 xpath 请求和这些函数之一(xpathApplyxpathSApplygetNodeSet) 来检查它。例如:

xpathApply(res,'//el')

一旦您创建了一个有效的 Xml 节点,您就可以应用 xmlValuexmlGetAttr,.. 来提取节点信息。所以这两个语句是等价的:

## we have already an R object, just apply xmlValue to the right child
xmlValue(res.tree$doc$children$doc)
## xpathSApply create an R object and pass it to
xpathSApply(res,'//el',xmlValue)

关于xml - 在 R XML 包中,xmlParse 和 xmlTreeParse 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20684507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com