Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 25, 2009 13:28:48

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

xml чтение параметров, минимальный код

какой есть наиболее короткий код для чтения параметров?

<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

Отредактировано (Авг. 25, 2009 13:29:15)

Офлайн

#2 Авг. 25, 2009 16:18:06

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

xml чтение параметров, минимальный код

Я пользуюсь xpath.

..bw



Офлайн

#3 Авг. 25, 2009 16:37:31

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

xml чтение параметров, минимальный код

bw
Я пользуюсь xpath.
..bw
можно поподробнее, желательно кусок кода или ещё что-нибудь.
заранее спасибо.

Офлайн

#4 Авг. 25, 2009 16:41:28

slavik
От:
Зарегистрирован: 2009-07-30
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

xml чтение параметров, минимальный код

o7412369815963
какой есть наиболее короткий код для чтения параметров?
getAttribute() вам в помощь и условные тернарные операции.
посмотрите dir(ваш объект) во время исполнения скрипта. может найдете еще полезности всякие.



Отредактировано (Авг. 25, 2009 16:42:48)

Офлайн

#5 Авг. 25, 2009 21:08:58

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

xml чтение параметров, минимальный код

lxml советую, очень быстро и минимум кода.



Офлайн

#6 Авг. 25, 2009 23:15:31

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

xml чтение параметров, минимальный код

если я правильно понял

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']

Офлайн

#7 Авг. 26, 2009 00:00:01

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

xml чтение параметров, минимальный код

Можно еще BeautifulSoup для этого дела использовать. Вроде будет удобно. Раньше я супом пользовался как валидирующим парсером HTML (это было для меня важнее чем API для обхода документа).

..bw



Отредактировано (Авг. 27, 2009 12:20:28)

Офлайн

#8 Авг. 26, 2009 05:46:46

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

xml чтение параметров, минимальный код

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version