将节点添加到具有相同节点名称但具有不同属性的xml文件与Python Dom
问题描述:
是否可以将具有相同名称的两个节点添加到xml文档?
这是类似的东西:
初始文件:将节点添加到具有相同节点名称但具有不同属性的xml文件与Python Dom
<Files>
<Filter>
</Filter>
</Files>
通缉文件:
<Files>
<Filter>
<File RelativePath=".\src\aaa.cxx" ></File>
<File RelativePath=".\src\bbb.cxx"></File>
</Filter>
</Files>
我想做到这一点与Python,DOM或minidom命名。
我试图使用appendChild函数,但只保留一个名称相同的节点。
我试图使用insertBefore函数,但它似乎也没有工作。
这里是源代码我的insertBefore使用(与使用appendChild,只需要删除nbOfFiles控制):
document = xml.dom.minidom.parse (fileTmp)
filesItem = Item.getElementsByTagName("Files")[0]
for filter in filesItem.getElementsByTagName("Filter") :
filterAttribute = filter.getAttribute("Filter")
filePath = os.path.split (fileTmp)[0] + "/src"
filesInPath = os.listdir (filePath)
fileElement = document.createElement ("File")
nbOfFiles = 0
for file in filesInPath :
fileElement.setAttribute ("RelativePath", file)
if nbOfFiles == 0 :
filter.appendChild (fileElement)
lastFileElement = fileElement
nbOfFiles = nbOfFiles + 1
else :
filter.insertBefore (fileElement, None)
感谢您的帮助。
答
不知道你的代码出错了,因为你还没有提供可测试的例子。我不是特别熟悉minidom,我更喜欢lxml。
我怀疑你需要分别实例化每个新的子节点。
这个工作对我来说:
>>> import xml.dom.minidom
>>>
>>> data_in = """<Files>
... <Filter>
... </Filter>
... </Files>
... """
>>>
>>> data_add = ('./src/aaa.cxx','./src/bbb.cxx')
>>>
>>> doc = xml.dom.minidom.parseString(data_in)
>>> files= doc.getElementsByTagName("Files")[0]
>>> for filter in files.getElementsByTagName("Filter"):
... for item in data_add:
... newNode = doc.createElement("File")
... newNode.setAttribute('RelativePath',item)
... filter.appendChild(newNode)
...
<DOM Element: File at 0x984c66c>
<DOM Element: File at 0x984c80c>
>>> print doc.toxml()
<?xml version="1.0" ?>
<Files>
<Filter>
<File RelativePath="./src/aaa.cxx"/><File RelativePath="./src/bbb.cxx"/></Filter>
</Files>
+0
它的工作原理。当我尝试时,我可能在某处出错。谢谢你的帮助 – oaimac 2011-03-23 08:01:08
你能不能给你有XML和所需的XML的例子吗? – MattH 2011-03-22 15:28:29
更重要的是,请显示您所说的不起作用的Python代码。 – 2011-03-22 15:30:32
更新与您的答案完成 – oaimac 2011-03-22 15:43:01