我的文件有点非结构化和杂乱。 我有foo.xml,其大小为100 gbs文件,例如:
<root>
<abc>
<page>
<code>some_path_1</code>
<string>another_path_1</string>
</page>
</abc>
<def string="blah">
<game>some_text_again</game>
<blah attribs="yes" labs="check">some_text_again</blah>
</def>
.
.
.
</root>
我需要的预期输出是:
some_path_1
another_path_1
attrib: string=blah
some_text_again
attrib: attribs=yes, labs=check
some_text_again
目前我正在使用lxml解析器。如:
from lxml import etree
root = etree.parse('foo.xml').getroot()
for i in root.iterchildren():
# do something
这是一个更好的方法,因为它是一个100 GB的文件。
答案 0 :(得分:0)
我对一个巨大的文件遇到了同样的问题,发现我必须逐步解析它。
import xml.etree.ElementTree as ET
context = ET.iterparse(result_file_name, events=["end"])
# turn it into an iterator
context = iter(context)
for event, elem in context:
if event == "end":
.....
答案 1 :(得分:0)
在启用流媒体的情况下使用XSLT 3.0,这将是:
<xsl:transform version="3.0"
expand-text="yes"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:mode on-no-match="shallow-skip"/>
<xsl:template match="text()">{.}&xa;</xsl:template>
<xsl:template match="*[@*]">attrib: {
string-join(@* ! (name() || '=' || .), ', ')
}
</xsl:template>
</xsl:transform>