R和XML:用处理程序'展平'XML树?

时间:2013-03-25 06:53:59

标签: xml r

我正在使用R中的XML包,并想要将XML树“展平”为字符串,使用xmlParse中的处理程序进行各种转换(例如,转换{{ 1}}到<code>...</code>等等。)

我并不完全确定这种“正确”的方式,并且正在寻求指导。

我在下面的示例中考虑了一种方法,我使用\code{...}标记的处理程序返回字符串 code,以及\code{contents}标记的处理程序将所有各种位粘贴在一起:

p

然而,对于某些我希望拥有祖先信息的元素(如父节点),这是不可行的,根据library(XML) code.xml <- '<p>This is some <code>inline code</code>.</p>' handlers <- list() handlers$code <- function (node) { paste0('\\code{', xmlValue(node), '}') } # paste together the bits of text handlers$p <- function(node) { bits <- sapply(xmlChildren(node), function (ch) { if (is.character(ch)) return(ch) xmlValue(ch) }) paste(bits, collapse='') } xmlRoot(xmlTreeParse(code.xml, asText=T, asTree=T, handlers=handlers, trim=F, useInternalNodes=F)) # "This is some \\code{inline code}." ,这意味着我应该使用{{1我打电话给xmlParse

但是,我还想在我的调用中设置useInternalNodes=TRUE以使我的扁平字符串退出调用,但这会出错:

xmlTreeParse

我很确定这是因为我的处理程序正在返回字符串而不是asTree=T,因此内部出现了错误(?)。

我可以将XML树扁平化为字符串,将用户定义的转换应用于特定标记的另一种方式(我必须能够知道我正在转换的父节点是什么)? /强>

(顺便说一下,我很清楚我当前的方法是“错误的”做这样的事情,但我不确定我应该做什么。我觉得如果我想要的话当我将XML展平为字符串时,要对xmlTreeParse(code.xml, asText=T, asTree=T, handlers=handlers, trim=F, useInternalNodes=T) # Error in class(ans) = oldClass(class(ans)) : # attempt to set an attribute on NULL XMLInternalNodes进行各种转换,然后我应该以某种方式使用XML解析树(而不是正则表达式),但这似乎不是正确的方法。首先,<code></code>的目的并不是要压扁和收集节点!)。

0 个答案:

没有答案