Я использую 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
Я мог бы решить проблему, не вкладывая элементы «Тема», изменив имена тем нижнего уровня на что-то вроде «SubTopic1» и «SubTopic2». Но я хочу воспользоваться преимуществами встроенного иерархического структурирования XML без необходимости использования разных имен элементов; кажется, что я должен иметь возможность вкладывать элементы «Тема» и что должен быть какой-то способ узнать, на каком уровне «Тема» я сейчас смотрю.
Я без особого успеха пробовал несколько различных функций XPath.