Путаница при разборе Python XML

1

Я использую xml.dom.mindom в Python и извлекли книгу node в нижнем XML-древе. Я хочу получить список всех дочерних узлов. В этом случае, я думаю, будет только один.

<Book>
    <Title>Why is this so hard</Title>
</Book

Когда я звоню:

nodeList = bookNode.childNodes
print "nodeList has " + str(nodeList.length) + " elements"
for node in nodeList:
    print "Found a " + node.nodeName + " node"

Я получаю следующий вывод:

nodeList has 3 elements
Found a #text node
Found a Book node
Found a #text node

Что это за случайные узлы #text? Как получить tagName и значение для каждого из легитимных узлов? Я хочу получить список пар ключ- > значение для каждого из узлов в книге. Я не хочу использовать getElementsByName, потому что раньше я не буду знать все теги tagNames.

Book -> "Why is this so hard"

Благодарения и Джонатан

Теги:

2 ответа

3
Лучший ответ

Первый текст node - это пробел между <Book> и < Название > . Второй - это пробел между </Title> и </Book>

  • 0
    Первый текстовый узел - это пробел между & lt; Book> и & lt; Title>. Второе - это пробел между & lt; / Title> и & lt; / Book>
0

Что представляют собой эти случайные узлы #text?

Вряд ли случайные, это текстовые узлы, представляющие пробелы, которые вы помещаете между тегами. XML должен помнить об этом, иначе документ будет работать вместе в одной нечитабельной строке при повторной инициализации.

Как получить tagName и значение для каждого из легитимных узлов?

Прокрутите дочерние узлы, игнорируя те, которые не являются элементами.

Я хочу получить список пар ключ- > значение для каждого из узлов в книге.

book= {}
for child in bookNode.childNodes:
    if child.nodeType==child.ELEMENT_NODE:
        book[child.tagName]= '' if child.firstChild is None else child.firstChild.data

Это предполагает, что каждый элемент содержит только один текст node.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню