2010-06-27 3 views
2

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

Допустим, у меня есть 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?

Благодаря

ответ

0

из xml.dom.minidom импорта *

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 

Это сделал трюк, сейчас!

4

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

import xml.etree 

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

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

eg

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

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

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

+0

Хм насчет xml.dom.minidom? –

+0

Вы могли бы использовать это - но тогда вы манипулируете DOM-lxml и Element Tree, чтобы сделать navifaction более «pythonic», а не DOM-специфическим – Mark

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 
1

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

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

+0

Мне не нравится ElementTree, возможно, я немного не использую синтаксис. xml.dom.minidom кажется мне более полным. Я обязательно посмотрю в lxml! Благодаря! –

+1

minidom - самый простой, но также наименее * питонический и наименее функциональный. Я использовал его, чтобы выполнить эту работу раньше, но если вы много времени проводите с XML, вы скоро это прекратите. –

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' 
Смежные вопросы