2011-03-22 194 views
1


是否可以将具有相同名称的两个节点添加到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) 

感谢您的帮助。

+0

你能不能给你有XML和所需的XML的例子吗? – MattH 2011-03-22 15:28:29

+0

更重要的是,请显示您所说的不起作用的Python代码。 – 2011-03-22 15:30:32

+0

更新与您的答案完成 – oaimac 2011-03-22 15:43:01

回答

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> 
+0

它的工作原理。当我尝试时,我可能在某处出错。谢谢你的帮助 – oaimac 2011-03-23 08:01:08

相关问题