xmlText=open("!/fml.xml").read().decode("cp866")
xml=QDomDocument()
xml.setContent(xmlText.encode("utf8"))
#доступ к элементу по известному пути
buyer=getDomElements(xml,"document/buyer")
print getDomElementText(xml,"document/buyer")
#доступ к атрибуту элемента по известному пути
print getDomElements(xml,"document")[0].attribute("contentEncoding")
#или так:
print getDomElementAttr(z,"SUMOPER","ed")
#обход всех вложенных элементов
for x in xrange(buyer[0].childNodes().count()):
#имя элемента
print buyer[0].childNodes().at(x).toElement().tagName()
#значение элемента
print unicode(buyer[0].childNodes().at(x).toElement().text())
#значение элемента - еще один вариант
print getDomElementText(xml,"document/buyer/%s" % buyer[0].childNodes().at(x).toElement().tagName())
и сами магические getDomElements , getDomElementText и getDomElementAttr
def getDomElements(xmlDom,xmlPath):
el=xmlDom
pathList=xmlPath.split("/")
for x in xrange(len(pathList)):
tmp=el.elementsByTagName(pathList[x])
if tmp.count()>0:
if x<len(pathList)-1:
el=el.elementsByTagName(pathList[x]).at(0).toElement()
else:
el=[]
for y in xrange(tmp.count()):
el.append(tmp.at(y).toElement())
else:
return []
return el
def getDomElementText(xmlDom,xmlPath):
el=getDomElements(xmlDom,xmlPath)
if el:
if isinstance(el, list):
return unicode(el[0].text())
else:
return unicode(el.text())
else:
return ""
def getDomElementAttr(xmlDom,xmlPath,attr):
eList=getDomElements(xmlDom,xmlPath)
if eList:
return eList[0].attribute(attr)
else:
return ""