【发布时间】:2009-10-20 19:36:07
【问题描述】:
我正在使用 Python (minidom) 解析一个 XML 文件,该文件打印出类似这样的层次结构(此处使用缩进来显示重要的层次关系):
My Document
Overview
Basic Features
About This Software
Platforms Supported
相反,程序在节点上迭代多次并生成以下打印重复节点。 (查看每次迭代的节点列表,很明显为什么会这样做,但我似乎无法找到获取我正在寻找的节点列表的方法。)
My Document
Overview
Basic Features
About This Software
Platforms Supported
Basic Features
About This Software
Platforms Supported
Platforms Supported
这里是 XML 源文件:
<?xml version="1.0" encoding="UTF-8"?>
<DOCMAP>
<Topic Target="ALL">
<Title>My Document</Title>
</Topic>
<Topic Target="ALL">
<Title>Overview</Title>
<Topic Target="ALL">
<Title>Basic Features</Title>
</Topic>
<Topic Target="ALL">
<Title>About This Software</Title>
<Topic Target="ALL">
<Title>Platforms Supported</Title>
</Topic>
</Topic>
</Topic>
</DOCMAP>
这是 Python 程序:
import xml.dom.minidom
from xml.dom.minidom import Node
dom = xml.dom.minidom.parse("test.xml")
Topic=dom.getElementsByTagName('Topic')
i = 0
for node in Topic:
alist=node.getElementsByTagName('Title')
for a in alist:
Title= a.firstChild.data
print Title
我可以通过不嵌套“主题”元素来解决问题,方法是将较低级别的主题名称更改为“子主题1”和“子主题2”之类的名称。但是,我想利用内置的 XML 层次结构而不需要不同的元素名称;看来我应该能够嵌套“主题”元素,并且应该有某种方法可以知道我当前正在查看的“主题”级别。
我尝试了许多不同的 XPath 函数,但都没有成功。
【问题讨论】:
-
如果你想要第一个的输出,你可以打印每个元素的文本 - 我不清楚结构如何影响想要的输出