Python 用lxml解析大型XML
我正在努力让我的脚本工作。到目前为止,它还没有输出任何东西 这是我的test.xmlPython 用lxml解析大型XML,python,xml,lxml,Python,Xml,Lxml,我正在努力让我的脚本工作。到目前为止,它还没有输出任何东西 这是我的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/
<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>
我没有得到任何错误,只是没有输出。如果值为0,我想得到的是解析元素。您正在解析一个带名称空间的文档,并且不存在“page”标记,因为这只适用于没有名称空间的标记 相反,您正在寻找{http://www.mediawiki.org/xml/export-0.8/}页面“元素,其中包含”{http://www.mediawiki.org/xml/export-0.8/}ns元素 许多lxml方法确实允许您指定名称空间映射以使匹配更容易,但不幸的是,iterparse方法不是其中之一 下面的.iterparse调用当然会处理正确的页面标记: 但您需要使用.find获取页面元素上的ns和title标记,或者使用xpath调用直接获取文本:
def process_element(elem):
if elem.xpath("./*[local-name()='ns']/text()=0"):
print elem.xpath("./*[local-name()='title']/text()")[0]
对于您的输入示例,它打印:
>>> fast_iter(context, process_element)
MediaWiki:Category
您正在分析一个带名称空间的文档,并且不存在“page”标记,因为这只适用于没有名称空间的标记 相反,您正在寻找{http://www.mediawiki.org/xml/export-0.8/}页面“元素,其中包含”{http://www.mediawiki.org/xml/export-0.8/}ns元素 许多lxml方法确实允许您指定名称空间映射以使匹配更容易,但不幸的是,iterparse方法不是其中之一 下面的.iterparse调用当然会处理正确的页面标记: 但您需要使用.find获取页面元素上的ns和title标记,或者使用xpath调用直接获取文本:
def process_element(elem):
if elem.xpath("./*[local-name()='ns']/text()=0"):
print elem.xpath("./*[local-name()='title']/text()")[0]
对于您的输入示例,它打印:
>>> fast_iter(context, process_element)
MediaWiki:Category