【发布时间】:2014-01-15 10:32:24
【问题描述】:
我最近几天一直在处理一个 XML 解析问题,但我就是想不通。我使用了 Python 内置的 ElementTree 以及 LXML 库,但得到了相同的结果。如果可以的话,我想继续使用 ElementTree,但如果该库有限制,那么 LXML 就可以了。请参阅以下 XML 示例。我要做的是找到一个连接元素并查看该元素包含哪些类。我期望每个连接至少包含一个类。如果它没有至少一个类,我想知道它没有。我面临的问题是我的代码为每个连接返回文档中的所有类,而不仅仅是该特定连接的类。
<test>
<connections>
<connection>
<id>10</id>
<classes>
<class>
<classname>DVD</classname>
</class>
<class>
<classname>DVD_TEST</classname>
</class>
</classes>
</connection>
<connection>
<id>20</id>
<classes>
<class>
<classname>TV</classname>
</class>
</classes>
</connection>
</connections>
</test>
例如,这是我的 Python 代码及其返回的输出:
for parentConnection in elemetTree.getiterator('connection'):
# print parentConnection.tag
for childConnection in parentConnection:
# print childConnection.text
if childConnection.tag == 'id':
connID = childConnection.text
print connID
for p in tree.xpath('./connections/connection/classes/class'):
for attrib in p.attrib:
print '@' + attrib + '=' + p.attrib[attrib]
children = p.getchildren()
for child in children:
print child.text
这是输出:
10
DVD
DVD_TEST
电视
20
DVD
DVD_TEST
电视
如您所见,我打印出 CONNECTION ID 的文本,然后是每个 CLASSNAME 的文本。但是,如您所见,它们都包含相同的 CLASSNAME 文本。输出应该看起来像这样:
10
DVD
DVD_TEST
20
电视
现在,正如上面手动修改的示例所示,每个连接 ID(父)都有相应的类/类名(子)。我只是不知道如何使这项工作。如果你们中的任何人有知识来完成这项工作,我很想听听。
我已尝试在此论坛上构建数据结构和其他示例,但无法正常工作。
【问题讨论】:
标签: python-2.7 xml-parsing parent-child lxml elementtree