gpt4 book ai didi

Python XML 属性错误 : 'NoneType' object has no attribute 'text'

转载 作者:数据小太阳 更新时间:2023-10-29 02:28:57 28 4
gpt4 key购买 nike

我无法弄清楚为什么会收到以下错误

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

我正在尝试使用 Python 2.7 导入 XML 文件。下面是我的 XML 文件的样子。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE dblp SYSTEM "file.dtd">

<top>
<blue key="2343998978">
<animal>lion</animal>
<animal>seal</animal>
<state>california</state>
<zoo>san diego</zoo>
<year>2015</year>
</blue>

<red key="9383893838739">
<elem_a>jennifer</elem_a>
<elem_a>paul</elem_a>
<elem_a>carl</elem_a>
<elem_b>kansas</elem_b>
<elem_d>australia</elem_d>
</red>

<yellow key="83963277272">
<car>chevy</car>
<car>dodge</car>
<cap>baseball</cap>
<cat>tabby</cat>
</yellow>

<red key="9383893838739">
<elem_a>greg</elem_a>
<elem_a>chris</elem_a>
<elem_a>john</elem_a>
<elem_b>arkansas</elem_b>
<elem_c>ice cream</elem_c>
</red>

<yellow key="84748346734">
<car>toyota</car>
<car>honda</car>
<cap>football</cap>
</yellow>
</top>

我是 Python 的新手,但创建了下面的脚本来导入上面的 XML 文件,这就是我收到上面的错误的时候。下面是我的代码。

import xml.etree.ElementTree as ET

myfile = 'C:/Users/user1/Desktop/file.xml'

tree = ET.parse(myfile)
root = tree.getroot()

for x in root.findall('blue'):
animal = x.find('animal').text
key1 = x.attrib['key']
state = x.find('state').text
zoo = x.find('zoo').text
year = x.find('year').text
print animal, key1, state, zoo, year

for y in root.findall('red'):
elem_a = y.find('elem_a').text
key2 = y.attrib['key']
elem_b = y.find('elem_b').text
elem_c = y.find('elem_c').text
elem_d = y.find('elem_d').text
print elem_a, key2, elem_b, elem_c, elem_d

for z in root.findall('yellow'):
car = z.find('car').text
key3 = z.attrib['key']
cap = z.find('cap').text
cat = z.find('cat').text
print car, key3, cap, cat

在 XML 文件中有三种主要元素类型:蓝色、红色和黄色。某些父元素存在的特定子元素的问题之一是其他元素不存在。例如,在上面的示例 XML 文件中,一个“黄色”元素具有三个子元素,包括“汽车”、“猫”和“帽子”,但并非每个“黄色”元素都具有所有三个子元素。在下面的 XML 中,第一个“黄色”元素有“猫”子节点,第二个“黄色”元素没有“猫”子元素,但在完整的 XML 文件中,“黄色”元素可以有任何一个,两个或“cat”、“cap”和“car”子元素中的三个。我知道这是导致错误的原因,但我不知道如何解决。有没有人对如何解决此错误有任何想法或提示?谢谢。

最佳答案

您可以遍历树,for x in root: 遍历根标记 blue、red 和 yellow,然后遍历每个 color 标记 你可以为 子树 再次循环。

  • x.tag 元素的标签名。
  • x.attrib 具有元素属性的映射。
  • x.getchildren() 是一个元素的所有子元素的列表。
  • x.text为元素的文本内容。

一个例子:

import xml.etree.ElementTree as ET

my_file = 'C:/Users/user1/Desktop/file.xml'

tree = ET.parse(my_file)
root = tree.getroot()

def print_subtree(subtree):
for y in subtree:
print "\t", y.tag, ":", y.text

for x in root:
print x.tag, x.attrib
print_subtree(x.getchildren())

这适用于两层树,因为 n 层树递归是必要的。

关于Python XML 属性错误 : 'NoneType' object has no attribute 'text' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40348944/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com