simplexml_load_string等效于Python / Django

时间:2010-06-27 18:30:21

标签: python xml django simplexml

我正在尝试在Python中找到xml-interpret函数(如simplexml_load_string),但没有成功:/

假设我在字符串中有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 个答案:

答案 0 :(得分:4)

最近的可能是ElementTree,它是python标准库的一部分(或扩展版本lxml

import  xml.etree

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

设置Element类的元素,可以将其视为XML元素列表

e.g。

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

如果要使用名称,也可以通过XPath进行搜索。

lxml还有一个objectify模型,允许访问元素“如果你正在处理普通的Python对象层次结构”。哪个更准确地匹配php用法

答案 1 :(得分:2)

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'

答案 2 :(得分:1)

Python standard library包括几个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

答案 3 :(得分:1)

ElementTree很常见,可能是Python中包含的最好的库(从2.5版开始)。

但是,我个人更喜欢lxml的力量和灵活性。 “lxml.objectify”方法对于将大型XML DOM解析为pythonic对象特别有用。

答案 4 :(得分:0)

来自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

这就是诀窍,现在!