我想让我的脚本正常工作.到目前为止,它没有设法输出任何东西.
这是我的test.xml
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.8/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.8/ http://www.mediawiki.org/xml/export-0.8.xsd" version="0.8" xml:lang="it">
<page>
<title>MediaWiki:Category</title>
<ns>0</ns>
<id>2</id>
<revision>
<id>11248</id>
<timestamp>2003-12-31T13:47:54Z</timestamp>
<contributor>
<username>Frieda</username>
<id>0</id>
</contributor>
<minor />
<text xml:space="preserve">categoria</text>
<sha1>0acykl71lto9v65yve23lmjgia1h6sz</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
</revision>
</page>
</mediawiki>
Run Code Online (Sandbox Code Playgroud)
这是我的代码
from lxml import etree
def fast_iter(context, func):
# fast_iter is useful if you need to free memory while iterating through a
# very large XML file.
#
# http://www.ibm.com/developerworks/xml/library/x-hiperfparse/
# Author: Liza Daly
for event, elem in context:
func(elem)
elem.clear()
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
def process_element(elem):
if elem.ns.text == '0':
print elem.title.text
context=etree.iterparse('test.xml', events=('end',), tag='page')
fast_iter(context, process_element)
Run Code Online (Sandbox Code Playgroud)
我没有任何错误,只是没有输出.我想得到的是解析元素,如果是0.
您正在解析命名空间文档,并且不存在'page'标记,因为这仅适用于没有命名空间的标记.
而是在寻找'{http://www.mediawiki.org/xml/export-0.8/}page'包含'{http://www.mediawiki.org/xml/export-0.8/}ns'元素的元素.
许多lxml方法都允许您指定命名空间映射以使匹配更容易,但iterparse()不幸的是,该方法不是其中之一.
以下.iterparse()调用肯定会处理正确的page标记:
context = etree.iterparse('test.xml', events=('end',), tag='{http://www.mediawiki.org/xml/export-0.8/}page')
Run Code Online (Sandbox Code Playgroud)
但是您需要使用在页面元素上.find()获取ns和title标记,或者使用xpath()调用直接获取文本:
def process_element(elem):
if elem.xpath("./*[local-name()='ns']/text()=0"):
print elem.xpath("./*[local-name()='title']/text()")[0]
Run Code Online (Sandbox Code Playgroud)
对于您的输入示例,它打印:
>>> fast_iter(context, process_element)
MediaWiki:Category
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |