Mar*_*rty 3 python xml elementtree
我正在尝试使用 Python 中的 ElementTree 解析这个 xml 字符串,
存储为字符串的数据,
xml = '''<?xml version="1.0" encoding="utf-8"?>
<SearchResults xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Student>
<RollNumber>1</RollNumber>
<Name>Abel</Name>
<PhoneNumber>Not Included</PhoneNumber>
<Email>abel@hisschool.edu</Email>
<Grade>7</Grade>
</Student>
<Student>
<RollNumber>2</RollNumber>
<Name>Joseph</Name>
<PhoneNumber>Not Included</PhoneNumber>
<Email>joseph@hisschool.edu</Email>
<Grade>7</Grade>
</Student>
<Student>
<RollNumber>3</RollNumber>
<Name>Mike</Name>
<PhoneNumber>Not Included</PhoneNumber>
<Email>mike@hisschool.edu</Email>
<Grade>7</Grade>
</Student>
</SearchResults>'''
Run Code Online (Sandbox Code Playgroud)
我用来将这个字符串解析为 xml 的代码,
from xml.etree import ElementTree
xml = ElementTree.fromstring(xml)
results = xml.findall('Student')
for students in results:
for student in students:
print student.get('Name')
Run Code Online (Sandbox Code Playgroud)
print results 将结果打印为元素,
[<Element 'Student' at 0x7feb615b4ad0>, <Element 'Student' at 0x7feb615b4c50>, <Element 'Student' at 0x7feb615b4e10>]
Run Code Online (Sandbox Code Playgroud)
在 for 循环内,print students 打印出相同的内容,
<Element 'Student' at 0x7fd722d88ad0>
<Element 'Student' at 0x7fd722d88c50>
<Element 'Student' at 0x7fd722d88e10>
Run Code Online (Sandbox Code Playgroud)
无论如何,当我尝试使用 获取学生的姓名时print student.get('Name'),程序返回无。
我想要做的是从每个标签的 xml 中提取值并构造一个 dict。
你在这里有一个双循环:
for students in results:
for student in students:
print student.get('Name')
Run Code Online (Sandbox Code Playgroud)
students是一个<Student>元素。通过迭代,您可以获得该元素中包含的单个元素。那些包含的元素(<RollNumber>、<Name>等)没有Name属性。
该.get()方法仅访问属性,但您似乎想要获取<Name>元素。.find()在此处使用或 XPath 表达式:
for student in results:
name = student.find('Name')
if name is not None:
print name.text
Run Code Online (Sandbox Code Playgroud)
或者
for student_name in xml.findall('.//Student/Name'):
print name.text
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8108 次 |
| 最近记录: |