使用Python Dom向XML文件添加具有相同节点名但不同属性的节点
在一个xml文档中,可以添加两个同名的节点吗?
这就像这样:
初始文件:
<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)
谢谢你的帮助。
1 个回答
3
我不太确定你的代码哪里出错了,因为你没有提供一个可以测试的例子。我对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>