我想什么时候使用xmlParse
函数和xmlTreeParse
函数?此外,参数值useInternalNodes=TRUE
或asText=TRUE
何时有用?
例如:
library("XML")
nct_url <- "http://clinicaltrials.gov/ct2/show/NCT00112281?resultsxml=true"
xml_doc <- xmlParse(nct_url, useInternalNodes=TRUE)
VS
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包后的一些反馈。xmlParse
是xmlTreeParse
的一个版本,其中参数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)
现在检查两个对象:
class(res)
[1] "XMLInternalDocument" "XMLAbstractDocument"
> class(res.tree)
[1] "XMLDocument" "XMLAbstractDocument"
你看res是一个内部文档。它是指向C对象的指针。
树是一个r对象。您可以获得如下属性:
res.tree$doc$children
$doc
<doc>
<el>aa</el>
</doc>
对于res,您应该使用有效的
xpath
请求和其中一个函数(xpathApply
,xpathSApply
,getNodeSet
)来检查它。例如:xpathApply(res,'//el')
创建有效的XML节点后,可以应用
xmlValue
,xmlGetAttr
,…来提取节点信息。所以这里这两个陈述是等价的:## 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/