Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用lxml解析大型XML_Python_Xml_Lxml - Fatal编程技术网

Python 用lxml解析大型XML

Python 用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/

我正在努力让我的脚本工作。到目前为止,它还没有输出任何东西

这是我的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>

我没有得到任何错误,只是没有输出。如果值为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