парсинг xml в питоне - PullRequest
       2

парсинг xml в питоне

2 голосов
/ 01 августа 2011

Я хочу разобрать текст из файла xml. Рассмотрим, что у меня есть несколько строк в файле .xml

<s id="1792387-2">Castro Verde is situated in the Baixo Alentejo Subregion within a territory known locally as the Campo Branco (English: White Plains).</s>

Как мне извлечь следующий текст из строки выше:

Castro Verde is situated in the Baixo Alentejo Subregion within a territory known locally as the Campo Branco (English: White Plains).

И после внесения некоторых изменений в текст я хочу вернуть текст изменения с тем же тегом, как показано ниже.

<s id="1792387-2"> Changed Text </s>

Любое предложение, пожалуйста. Спасибо!

Ответы [ 3 ]

5 голосов
/ 01 августа 2011

LXML делает это особенно легко.

>>> from lxml import etree
>>> text = '''<s id="1792387-2">Castro Verde is situated in the Baixo Alentejo Subregion within a territory known locally as the Campo Branco (English: White Plains).</s>'''
>>> def edit(s):
...     return 'Changed Text'
... 
>>> t = etree.fromstring(text)
>>> t.text = edit(t.text)
>>> etree.tostring(t)
'<s id="1792387-2">Changed Text</s>'
4 голосов
/ 01 августа 2011

Существует пара методов stdlib для разбора xml… Но в общем случае ElementTree является самым простым:

from xml.etree import ElementTree
from StringIO import StringIO
doc = ElementTree.parse(StringIO("""<doc><s id="1792387-2">Castro…</s><s id="1792387-3">Other stuff</s></doc>"""))
for elem in doc.findall("s"):
    print "Text:", elem.text
    elem.text = "new text"
    print "New:", ElementTree.dump(elem)

А если ваш XML приходит из файла, вы можете использовать:

f = open("path/to/foo.xml")
doc = ElementTree.parse(f)
f.close()
… use `doc` …
1 голос
/ 01 августа 2011

Парсинг XML с использованием пакета dom (часть Python) http://docs.python.org/py3k/library/xml.dom.minidom.html - мой любимый:

import xml.dom.minidom
d = xml.dom.minidom.parseString("<s id=\"1792387-2\">Castro Verde is situated in the Baixo Alentejo Subregion within a territory known locally as the Campo Branco (English: White Plains).</s>")
oldText = d.childNodes[0].childNodes[0].data
d.childNodes[0].childNodes[0].data = "Changed text"
d.toxml()

Но это не поможет вам разобрать текст, поэтому я не уверен, что выточно хочу там.

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