Python 3.4,使用 etree.iterparse 解析 GB++ 大小的 XML 维基百科转储文件。我想在当前匹配的<page>
元素中测试它的<ns>
值,然后根据后一个值我想导出整个<page>
对象的源 XML 及其所有内容,包括嵌套在其中的任何元素,即整篇文章的 XML。
我可以迭代<page>
对象并找到我想要的对象,但是所有可用的函数似乎都想读取文本/属性值,而我只需要源文件的 XML 代码的 utf8 字符串副本,用于完整的范围<page>
对象。这可能吗?
XML 的精简版本如下所示:
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xml:lang="en">
<page>
<title>Some Article</title>
<ns>0</ns>
<revision>
<timestamp>2017-07-27T00:59:41Z</timestamp>
<text xml:space="preserve">some text</text>
</revision>
</page>
<page>
<title>User:Wonychifans</title>
<ns>2</ns>
<revision>
<text xml:space="preserve">blah blah</text>
</revision>
</page>
</mediawiki>
让我进行价值测试的 python 代码在<ns>
这里:
``from lxml import etree
# store namespace string for all elements (only one used in Wikipedia XML docs)
NAMESPACE = '{http://www.mediawiki.org/xml/export-0.10/}'
ns = {'wiki' : 'http://www.mediawiki.org/xml/export-0.10/'}
context = etree.iterparse('src.xml', events=('end',))
for event, elem in context:
# at end of parsing each
if elem.tag == (NAMESPACE+'page') and event == 'end':
tagNs = elem.find('wiki:ns',ns)
if tagNs is not None:
nsValue = tagNs.text
if nsValue == '2':
# export the current <page>'s XML code
在这种情况下,我只想提取第二个元素的 XML 代码,即<page>
一个字符串:
<page>
<title>User:Wonychifans</title>
<ns>2</ns>
<revision>
<text xml:space="preserve">blah blah</text>
</revision>
</page>
编辑:小错字和更好的标记