を使用してxmlをSAX形式で読み取る。
のは、次のXMLファイルを見てみましょう:
<items>
<item>
<id>l001</id>
<qty>1</qty>
<price>10</price>
</item>
<item>
<id>l002</id>
<qty>100</qty>
<price>10</price>
</item>
<item>
<id>l003</id>
<qty>5</qty>
<price>12</price>
</item>
[...]
</items>
我々は(代わりにhandlers
のbranches
を使用して)ツリーとして各item
をロードし、「ハイブリッドモード」でメモリーにすべてを読み込む避けるために、イベントパーサーを使用します。 https://stackoverflow.com/a/31014005/1992669の再利用、これは与える:
library(XML)
input <- "input.xml"
items <- NULL
maxItems <- 50
parseItem = function (parser, node, ...) {
children <- xmlChildren(node)
items <<- rbind(items, sapply(children, xmlValue))
if (nrow(items) == maxItems) {
xmlStopParser(parser)
}
}
# with XMLParserContextFunction, we get the parser as first parameter
# so we can call xmlStopParser
class(parseItem) = c("XMLParserContextFunction", "SAXBranchFunction")
xmlEventParse(input,
branches = list(item = parseItem),
ignoreBlanks = T
)
items <- as.data.frame(items)
多分 'readr :: read_lines(...、n_max = n)は'それはあなたのxml状況のために働くと確信していないが、それがZIPファイルで動作するため – Nate
@NathanDayのおかげで、あなたの入力。残念ながら、最初の 'n '行を' read_lines'で読み込み、 'read_xml'に入力しても動作しません。 –
それはそれほど単純ではないようです。 XMLにはタグがあるので、データをフィルタリングする前に、これらのタグをすべて解析する必要があります。問題は、私のXMLファイルが大きすぎます。私はそこにRの解決策がないと信じられない。 –