【发布时间】:2017-02-09 07:55:53
【问题描述】:
我正在尝试通过编写一个脚本来学习 Python,该脚本将从 XML 文件中的多个记录中提取数据。通过在网络上搜索,我已经能够找到大多数问题的答案,但是我还没有找到一种方法来确定 XML 标记在 getElementsByTagName("tagname") 之前是否不包含任何数据[0].firstChild.data 方法被使用,当没有数据存在时抛出 AttributeError。我意识到我可以尝试编写代码并处理 AttributeError,但我宁愿在尝试提取数据之前知道标签是空的,而不必处理异常。 下面是一个 XML 文件的示例,其中包含两条记录,一条带有标签中的数据,一条带有空标签。
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<records>
<rec>
<name>ZYSRQPO</name>
<state>Washington</state>
<country>United States</country>
</rec>
<rec>
<name>ZYXWVUT</name>
<state></state>
<country>Mexico</country>
</rec>
</records>
这是我可能用来提取数据的代码示例:
from xml.dom import minidom
import sys
mydoc = minidom.parse('mydataFile.xml')
records = mydoc.getElementsByTagName("rec")
for rec in records:
try:
name = rec.getElementsByTagName("name")[0].firstChild.data
state = rec.getElementsByTagName("state")[0].firstChild.data
country = rec.getElementsByTagName("country")[0].firstChild.data
print('{}\t{}\t{}'.format(name, state, country))
except (AttributeError):
print('AttributeError encountered in record {}'.format(name), file=sys.stderr)
continue
处理此文件时,不会打印名为 ZYXWVUT 的记录的任何信息,除非遇到异常。我希望能够为使用的州名设置一个空值,并打印有关此记录的其余信息。有没有一种方法可以用来做我想做的事情,这样我就可以在使用getElementsByTagName之前使用if语句来确定标签是否不包含数据并在找不到数据时遇到错误?
【问题讨论】:
标签: xml-parsing minidom python-3.6