python minidom解析器返回不完整的文本值

时间:2014-01-21 07:08:36

标签: python xml minidom

我正在尝试更新现有的XML文件。如果XML文件中没有标记,则代码应该添加它,否则什么也不做。因此,有一种方法可以根据节点名称值来确定Node是否已经存在。

def findElementNodeByName(parentNode, elementTagName, nameValue):
    elementNodes = parentNode.getElementsByTagName(elementTagName)
    if not elementNodes:
        return None
    for elementNode in elementNodes:
        if elementNode.getElementsByTagName("Name"):
            if elementNode.getElementsByTagName("Name")[0].childNodes[0].nodeType == xml.dom.Node.TEXT_NODE and \
               elementNode.getElementsByTagName("Name")[0].childNodes[0].data == nameValue:
                return elementNode
        else:
            raise Exception("Tag not found." )
    return None

XML节点将类似于

<DC>
  <ESX>
    <Name>abcd.xyz.com</Name>
    <pnic>vmnic3</pnic>
  </ESX>
  <ESX>
    <Name>efgh.xyz.com</Name>
    <pnic>vmnic2</pnic>
  </ESX>
</DC>

因此,当我尝试添加节点ESX abcd.xyz.com时,findElementNodeByName应返回现有节点。但很少有findElementNodeByName方法为现有节点返回None。这是一个不一致的问题。

在调试时,我发现解析器返回文本节点的部分值,例如elementNode.getElementsByTagName("Name")[0].childNodes[0].data给出abcd.x而不是abcd.xyz.com

0 个答案:

没有答案