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 ""