Как установить содержимое разметки, называемой «текст», с помощью l xml .objectify? - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь проанализировать XML файл в python с помощью l xml .objectify, изменить текст из <ns:text> и затем собрать обратно XML.

Это краткий обзор моего XML файла:

<ns:map xmlns:ns="...">
    <ns:topics>
        <ns:topic>
            <ns:text>HI</ns:text>
        </ns:topic>
        <ns:topic>
            <ns:text>HELLO</ns:text>
        </ns:topic>
    </ns:topics>
</ns:map>

Я проанализировал XML и получил топи c в темах. Я пытался изменить текст «HI» на «test» для <ns:text> в первой топи c.

from lxml import objectify as obj
from lxml import etree

root= obj.parse(xmlFileName)
root.topics.topic[0].text = 'test'
obj_xml= etree.tostring(root, encoding="unicode", pretty_print=True)
print(obj_xml)

Я предполагал, что это будет результат:

<ns:map xmlns:ns="...">
    <ns:topics>
        <ns:topic>
            <ns:text>test</ns:text>
        </ns:topic>
        <ns:topic>
            <ns:text>HELLO</ns:text>
        </ns:topic>
    </ns:topics>
</ns:map>

но .text является атрибутом только для чтения, а не моим <ns:text>. Я не могу получить доступ к своему <ns:text>, чтобы изменить текст.

Я читал много уроков с l xml .objectify, но не могу найти что-то похожее на мою проблему.

PS: я не могу изменить название разметки. Это сгенерированный XML.

Спасибо, Елена

1 Ответ

0 голосов
/ 14 апреля 2020

Я нашел ответ. Я могу получить доступ и изменить свой текст, сделав это:

root.topics.topic[0]["text"] = "test"

...