如何列出巨大XML文件的前20行?

时间:2014-07-11 15:49:58

标签: xml r large-files

我试图使用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行

2 个答案:

答案 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是一个特殊变量,允许将状态信息传递给处理程序。文档中还有其他示例。