Найти - Пользователи
Полная версия: xml чтение параметров, минимальный код
Начало » Python для новичков » xml чтение параметров, минимальный код
1
o7412369815963
какой есть наиболее короткий код для чтения параметров?
<conf>
<server>
<active name="MyName">0</active>
<active name="MyName2">1</active>
<scripts>
</scripts>
</server>
</conf>
нужно прочитать звено/параметр conf/server/active/name
знаю что через XPath можно одной,двумя строками/командами обойтись.
а сейчас извращаюсь примерно так:
import xml.dom.minidom

g_hostlist = {}

def XMLgetText(nodelist):
rc = ""
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc = rc + node.data
return rc

def LoadXMLClient():
try:
global g_hostlist
document = open('s1.xml','r').read()
dom = xml.dom.minidom.parseString(document)
doc = dom.getElementsByTagName("server")
for d in doc:
name = d.getElementsByTagName("active")
if len(name)>0:
if XMLgetText(name[0].childNodes)=='1':
iname = d.getElementsByTagName("name")
if len(iname)>0: name = XMLgetText(iname[0].childNodes)
ip = d.getElementsByTagName("ip")
if len(ip)>0: pp = XMLgetText(ip[0].childNodes)
pr = 8011
ip = d.getElementsByTagName("port")
if len(ip)>0:
try:
pr = int(XMLgetText(ip[0].childNodes))
except:
print 'Error port'
#print name,pp
g_hostlist[name] = {'ip':pp, 'port':pr}
return 1
except:
print 'Error XML pars'
return 0
bw
Я пользуюсь xpath.

..bw
o7412369815963
bw
Я пользуюсь xpath.
..bw
можно поподробнее, желательно кусок кода или ещё что-нибудь.
заранее спасибо.
slavik
o7412369815963
какой есть наиболее короткий код для чтения параметров?
getAttribute() вам в помощь и условные тернарные операции.
посмотрите dir(ваш объект) во время исполнения скрипта. может найдете еще полезности всякие.
Enchantner
lxml советую, очень быстро и минимум кода.
slav0nic
если я правильно понял
In [1]: import StringIO
In [16]: conf = """
....: <conf>
....: <server>
....: <active name="MyName">0</active>
....: <active name="MyName2">1</active>
....: <scripts>
....: </scripts>
....: </server>
....: </conf>
....: """


In [18]: f = StringIO.StringIO(conf)

In [19]: from lxml import etree

In [20]: tree = etree.parse(f)

In [16]: conf = """
....: <conf>
....: <server>
....: <active name="MyName">0</active>
....: <active name="MyName2">1</active>
....: <scripts>
....: </scripts>
....: </server>
....: </conf>
....: """

In [18]: f = StringIO.StringIO(conf)

In [19]: from lxml import etree

In [20]: tree = etree.parse(f)

In [24]: tree.xpath('/conf/server/active/text()')
Out[24]: ['0', '1']

In [26]: tree.xpath('/conf/server/active/@name')
Out[26]: ['MyName', 'MyName2']
bw
Можно еще BeautifulSoup для этого дела использовать. Вроде будет удобно. Раньше я супом пользовался как валидирующим парсером HTML (это было для меня важнее чем API для обхода документа).

..bw
o7412369815963
всем спасибо, буду пробовать
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB