simplexml_load_string эквивалент Python / Django - PullRequest
2 голосов
/ 27 июня 2010

Я пытаюсь найти функцию XML-интерпретации (например, simplexml_load_string) в Python, но безуспешно: /

Допустим, у меня есть xml в строке

my_xml_string = """
<root>
      <content>
        <one>A value</one>
        <two>Here goes for ...</two>
      </content>
</root>"""

Чтобы прочитать значение в php, я обычно делал бы что-то вроде этого

// read into object
$xml = simplexml_load_string(my_xml_string);

// print some values
echo $xml->root->content->one
echo $xml->root->content->two

Есть ли эквивалентный объект в python / django?

Спасибо

Ответы [ 5 ]

4 голосов
/ 27 июня 2010

Ближайшим, вероятно, является ElementTree , который является частью стандартной библиотеки Python (или расширенной версии lxml )

import  xml.etree

element =  xml.etree.ElementTree.XML(my_xml_string)

устанавливает элемент класса Element, который можно рассматривать как списки элементов XML

1010 *, например *

# for your example
print(element[0][0].tag)
print(element[0][0].text)
print(element[0][3].text)

Вы также можете выполнять поиск по XPath, если хотите использовать имена.

lxml также имеет модель objectify , которая разрешает доступ к элементам как «если вы имели дело с обычной иерархией объектов Python». Что более точно соответствует использованию php

2 голосов
/ 29 марта 2012

lxml.objectify делает именно то, что вы хотите

In [1]: from lxml import objectify

In [2]: x = objectify.fromstring("""<response><version>1.2</version><amount>1.01</amount><currency>USD</currency></response>""")

In [3]: x.version
Out[3]: 1.2

In [4]: x.amount
Out[4]: 1.01

In [5]: x.currency
Out[5]: 'USD'
1 голос
/ 27 июня 2010

ElementTree довольно распространен и, вероятно, является лучшей библиотекой, включенной в Python (начиная с версии 2.5).

Однако лично я предпочитаю lxml как для мощности, так и длягибкость.Метод «lxml.objectify» особенно полезен для разбора больших XML DOM в объекты pythonic.

1 голос
/ 27 июня 2010

Стандартная библиотека Python 1002 * включает несколько модулей синтаксического анализа xml. Вероятно, самым простым является ElementTree.

from xml.etree import cElementTree as ET
xml = ET.fromstring(my_xml_string)

print xml.find('.//content/one').text
print xml.find('.//content/two').text
0 голосов
/ 28 июня 2010

из xml.dom.minidom import *

my_xml_string = """
<root>
      <content>
        <one>A value</one>
        <two>Here goes for ...</two>
      </content>
</root>"""

xml = parseString(xml_string)
result = xml.getElementsByTagName('one')[0].firstChild.data

Пока что все получилось!

...