我试图使用xmlEventParse和branch参数解析一个巨大的XML文件。 为了演示,我们将认为mtcars.xml是巨大的。
fileName = system.file("exampleData", "mtcars.xml", package = "XML")
doc <- xmlParse(fileName, useInternalNode=TRUE)
doc
我可以通过这种方式查看整个文件,但想象一下xmlParse崩溃......
为了进一步编码 - 能够看到巨大文件的开头会很棒。 如何查看XML文件的前20行? (像)
头(DOC,20)
扫描给出了这样的错误
> scan(fileName,nlines = 10)
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
scan() expected 'a real', got '<?xml'
实际上以某种类似的方式看到尾部也很棒或者从文件中间随机出现20行
答案 0 :(得分:2)
尝试readLines()。
first20lines <- readLines(fileName, n=20)
答案 1 :(得分:2)
如果您只想显示fileName
的前20行,请使用readLines(...)
。
如果要显示xml结构的前20个元素,可以使用xmlEventParse(...)
中的处理函数
f <- function(ctxt,name,attrs,.state) {
if (name=="record") {
print(paste(.state, attrs, sep=" - "))
.state = .state+1
if(.state>20) xmlStopParser(ctxt)
}
.state
}
class(f) = "XMLParserContextFunction"
xmlEventParse(fileName,handlers=list(.startElement=f),
useTagName=FALSE, addContext = FALSE, state=0)
# [1] "0 - Mazda RX4"
# [1] "1 - Mazda RX4 Wag"
# [1] "2 - Datsun 710"
# [1] "3 - Hornet 4 Drive"
# [1] "4 - Hornet Sportabout"
# [1] "5 - Valiant"
# [1] "6 - Duster 360"
# [1] "7 - Merc 240D"
此示例中的处理程序f(...)
显示前20个<record>...</record>
节点的属性,然后停止处理xml文件。 state
是一个特殊变量,允许将状态信息传递给处理程序。文档中还有其他示例。