From 0fb6fe5a970f5710f8e87fda2f91de0acfd9fdaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCrer=20=C3=96zen?= Date: Fri, 16 Sep 2005 07:39:44 +0000 Subject: [PATCH] =?UTF-8?q?Hata=20466=20i=C3=A7in=20yama:=20python=20dom'u?= =?UTF-8?q?n=20getElementsByTagName=20metodu=20verilen=20tag=20ismini=20tr?= =?UTF-8?q?ee=20boyunca=20a=C5=9Fa=C4=9F=C4=B1=20do=C4=9Fru=20ar=C4=B1yor?= =?UTF-8?q?=20ve=20her=20kar=C5=9F=C4=B1la=C5=9Ft=C4=B1=C4=9F=C4=B1=20yerd?= =?UTF-8?q?ekini=20topluyor.=20Bu=20davran=C4=B1=C5=9F=20y=C3=BCz=C3=BCnde?= =?UTF-8?q?n=20ayn=C4=B1=20tag=20ismini=20farkl=C4=B1=20yerlerde=20kullan?= =?UTF-8?q?=C4=B1nca=20problemler=20=C3=A7=C4=B1k=C4=B1yor.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit xmlext'e getTagByName diye bir fonksiyon ekledim, bu sadece verilen node'un ilk seviye çocuklarında arama yapıyor, diğer fonksiyonları da bunu kullanacak şekilde değiştirdim. Bir tek metadata.py içinde PackageInfo versiyon çekmek için tree boyunca tarama davranışını kullanıyordu, onu da full path kullanacak şekilde değiştirdim. Eğer öbür türlü kalması gerekiyorsa, bu davranışta ayrı bir fonksiyon koyarız xmlext'e. repostats ve beta-light.sh ile test ettim, bir sorun yok. --- pisi/metadata.py | 6 +++--- pisi/xmlext.py | 23 ++++++++++++----------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/pisi/metadata.py b/pisi/metadata.py index 0473ccb0..1907a3d6 100644 --- a/pisi/metadata.py +++ b/pisi/metadata.py @@ -50,9 +50,9 @@ class PackageInfo(specfile.PackageInfo): def __init__(self, node = None): if node: specfile.PackageInfo.__init__(self, node) - self.version = getNodeText(node, "Version") - self.release = getNodeText(node, "Release") - build_ = getNodeText(node, "Build") + self.version = getNodeText(node, "History/Update/Version") + self.release = getNodeText(node, "History/Update/Release") + build_ = getNodeText(node, "History/Update/Build") if build_ != None: self.build = int(build_) else: diff --git a/pisi/xmlext.py b/pisi/xmlext.py index c6e4729e..f3dfe6e2 100644 --- a/pisi/xmlext.py +++ b/pisi/xmlext.py @@ -26,11 +26,12 @@ class XmlError(pisi.Error): def getNodeAttribute(node, attrname): """get named attribute from DOM node""" - for i in range(node.attributes.length): - attr = node.attributes.item(i) - if attr.name == attrname: - return attr.childNodes[0].data - return None + if not node.hasAttribute(attrname): + return None + return node.getAttribute(attrname) + +def getTagByName(parent, childName): + return [x for x in parent.childNodes if x.nodeType == x.ELEMENT_NODE if x.tagName == childName] def getNodeText(node, tagpath = ""): """get the first child and expect it to be text!""" @@ -69,13 +70,13 @@ def getNode(node, tagpath): # iterative code to search for the path # get DOM for top node - nodeList = node.getElementsByTagName(tags[0]) + nodeList = getTagByName(node, tags[0]) if len(nodeList) == 0: return None # not found node = nodeList[0] # discard other matches for tag in tags[1:]: - nodeList = node.getElementsByTagName(tag) + nodeList = getTagByName(node, tag) if len(nodeList) == 0: return None else: @@ -91,12 +92,12 @@ def getAllNodes(node, tagPath): if len(tags) == 0: return [] - nodeList = node.getElementsByTagName(tags[0]) + nodeList = getTagByName(node, tags[0]) if len(nodeList) == 0: return [] for tag in tags[1:]: - results = map(lambda x: x.getElementsByTagName(tag),nodeList) + results = map(lambda x: getTagByName(x, tag), nodeList) nodeList = [] for x in results: nodeList.extend(x) @@ -135,7 +136,7 @@ def addNode(dom, node, tagpath, newnode = None): # iterative code to search for the path # get DOM for top node - nodeList = node.getElementsByTagName(tags[0]) + nodeList = getTagByName(node, tags[0]) if len(nodeList) == 0: return addTagPath(dom, node, tags, newnode) @@ -144,7 +145,7 @@ def addNode(dom, node, tagpath, newnode = None): tags.pop(0) while len(tags)>0: tag = tags.pop(0) - nodeList = node.getElementsByTagName(tag) + nodeList = getTagByName(node, tag) if len(nodeList) == 0: # couldn't find tags.insert(0, tag) # put it back in return addTagPath(dom, node, tags, newnode)