Форум сайта python.su
какой есть наиболее короткий код для чтения параметров?
<conf>
<server>
<active name="MyName">0</active>
<active name="MyName2">1</active>
<scripts>
</scripts>
</server>
</conf>
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)
Офлайн
Я пользуюсь xpath.
..bw
Офлайн
bwможно поподробнее, желательно кусок кода или ещё что-нибудь.
Я пользуюсь xpath.
..bw
Офлайн
o7412369815963getAttribute() вам в помощь и условные тернарные операции.
какой есть наиболее короткий код для чтения параметров?
Отредактировано (Авг. 25, 2009 16:42:48)
Офлайн
lxml советую, очень быстро и минимум кода.
Офлайн
если я правильно понял
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']
Офлайн
Можно еще BeautifulSoup для этого дела использовать. Вроде будет удобно. Раньше я супом пользовался как валидирующим парсером HTML (это было для меня важнее чем API для обхода документа).
..bw
Отредактировано (Авг. 27, 2009 12:20:28)
Офлайн
всем спасибо, буду пробовать
Офлайн