我正在尝试更新现有的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
。