Python XML нужна помощь с ошибкой программирования - PullRequest
1 голос
/ 06 марта 2010

У меня нижеуказанный код.

import xml.dom.minidom

def get_a_document(name):
    return xml.dom.minidom.parse(name)

doc = get_a_document("sources.xml")

sources = doc.childNodes[1]

for e in sources.childNodes:
    if e.nodeType == e.ELEMENT_NODE and e.localName == "source":
            for source in e.childNodes:
                    print source.localName
                    print source.nodeType
                    if source.nodeType == source.ELEMENT_NAME and source.localName == "language":
                            print source.localName
            country = doc.createElement("country")
            e.appendChild(country)

Я пытаюсь прочитать sources.xml и добавить страну элемента. Но я получаю ошибку ниже.

AttributeError: Text instance has no attribute 'ELEMENT_NAME'

Sources.xml выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<!--sources.xml for multilingual, follows an ID range for different type of sources. Dailies sources are merged to this list-->
    <sources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <source>
    <id>1005001</id>
    <language>Afar</language>
    <status>active</status>
    <tags>
      <tag>language</tag>
    </tags>
    <title>Afar</title>
    </source>
    </sources>

Может кто-нибудь также предложить хороший учебник для библиотеки минидомов. Также, если бы вы могли предложить лучшую библиотеку Python xml, это будет здорово.

Спасибо Bala

Ответы [ 2 ]

1 голос
/ 06 марта 2010

[текстовый узел DOM "u '\ n'", элемент DOM: источник в 0x709f80, текстовый узел DOM "u '\ n'"]

Каждая новая строка обрабатывается как отдельная дочерняя сущность при использовании библиотеки xml.dom.minidom. К сожалению, эти новые строки не содержат значение e.ELEMENT_NAME. Похоже, вы это поняли, но в конечном итоге вы хотели, чтобы это было e.ELEMENT_NODE, а не e.ELEMENT_NAME

for e in sources.childNodes:
 if e.nodeType == e.ELEMENT_NODE and e.localName == "source":
         for source in e.childNodes:
                 if source.nodeType == e.ELEMENT_NODE and source.localName == "language":
                         print source.localName
                         print source.nodeType
                         print source.localName
         country = doc.createElement("country")
         e.appendChild(country)

Cheers, R

1 голос
/ 06 марта 2010

Вероятно, вы сталкиваетесь с узлами, содержащими пробелы между вашими тегами.Непонятно, что вы пытаетесь сделать, но это может сработать, если вы просто удалите часть source.nodeType == source.ELEMENT_NAME.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...