XML解析错误AttributeError:'NoneType'对象没有属性'text'

问题描述 投票:1回答:1

我的问题可能有一个简单的解决方案,但是我对python3很陌生,所以请对我轻松一点;)

我正在运行一个简单的脚本,该脚本已使用此代码成功解析了xml文件中的信息

import xml.etree.ElementTree as ET

root = ET.fromstring(my_xml_file)

u = root.find(".//doc-number").text.rstrip()
print("Doc number: %s\n" % u)

我正在解析的xml看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/3.2/style/exchange.xsl"?>
<example:world-data xmlns="http://www.example.org" xmlns:ops="http://example.oorg" xmlns:xlink="http://www.w3.oorg/1999/xlink">
  <exchange-documents>
    <exchange-document system="acb.org" family-id="543672" country="US" doc-number="95962" kind="B2">
      <bibliographic-data>
       ...and so on... and ends like this
   </exchange-document>
  </exchange-documents>
</example:world-data>

(由于堆栈溢出策略,链接被编辑)

但是,如果我尝试使用相同的python命令从相同的api解析另一个xml,则会出现此错误代码

AttributeError: 'NoneType' object has no attribute 'text'

第二个xml文件看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/3.2/style/pub-ftxt-claims.xsl"?>
<ops:world-data xmlns="http://www.example.org/exchange" xmlns:example="http://example.org" xmlns:xlink="http://www.example.org/1999/xlink">
  <ftxt:fulltext-documents xmlns="http://www.examp.org/fulltext" xmlns:ftxt="ww.example/fulltext">
    <ftxt:fulltext-document system="example.org" fulltext-format="text-only">
      <bibliographic-data>
        <publication-reference data-format="docdb">
          <document-id>
            <country>EP</country>
            <doc-number>10000</doc-number>
            <kind>A</kind>
          </document-id>
        </publication-reference>
      </bibliographic-data>
      <claims lang="EN">
        <claim>
          <claim-text>1. Some text.</claim-text>
          <claim-text>2. Some text.</claim-text>
          <claim-text>2. Some text.</claim-text>
        </claim>
      </claims>
    </ftxt:fulltext-document>
  </ftxt:fulltext-documents>
</ops:world-patent-data>

我再试一次

root = ET.fromstring(usr_str)

u = root.find(".//claim-text").text.rstrip()
print("Abstract: %s\n" % u)

但是它仅打印上述错误消息。为什么我可以使用这些命令解析第一个xml而不解析第二个xml?

非常感谢您的帮助。

python-3.x xml xml-parsing
1个回答
0
投票

没有名为doc-number的元素,因此尝试.//doc-number不能在输入中选择任何内容。您具有名称为doc-number的属性,因此//@doc-number的XPath将选择任何此类属性。

© www.soinside.com 2019 - 2024. All rights reserved.