我有下面的xml文件和
data_string = """
<Bookstore>
<Book ISBN="ISBN-13:978-1599620787" Price="15.23" Weight="1.5">
<Title>New York Deco</Title>
<Authors>
<Author Residence="New York City">
<First_Name>Richard</First_Name>
<Last_Name>Berenholtz</Last_Name>
</Author>
</Authors>
</Book>
<Book ISBN="ISBN-13:978-1579128562" Price="15.80">
<Remark>
Five Hundred Buildings of New York and over one million other books are available for Amazon Kindle.
</Remark>
<Title>Five Hundred Buildings of New York</Title>
<Authors>
<Author Residence="Beijing">
<First_Name>Bill</First_Name>
<Last_Name>Harris</Last_Name>
</Author>
<Author Residence="New York City">
<First_Name>Jorg</First_Name>
<Last_Name>Brockmann</Last_Name>
</Author>
</Authors>
</Book>
</Bookstore>
"""
我有一个示例代码&#34;找一本重1.5盎司的书的作者的名字&#34;
root.find('Book[@Weight="1.5"]/Authors/Author/First_Name').text
这很好用。
然后我尝试通过过滤提取last_name 使用下面的代码
root.find('Author[@Residence="New York City"]/Last_Name').text
它给了我一个错误
AttributeError: 'NoneType' object has no attribute 'text'
我该如何解决这个问题?为什么这是错的?谢谢!
答案 0 :(得分:1)
在这种情况下,查询应为:
root.find('Book/Authors/Author[@Residence="New York City"]/Last_Name').text
因为您从根开始搜索,而您只能看到根Bookstore
的直接子项,即Book
标记。
请注意,由于您有许多作者居住在纽约,您可能需要找到所有作者:
names = [tag.text for tag in root.findall('Book/Authors/Author[@Residence="New York City"]/Last_Name')]
print(names)
>>>['Berenholtz', 'Brockmann']
此处findall
返回包含作者姓氏标记的列表,您可以迭代并应用text
属性