python - 使用Python Dom向xml文件添加具有相同节点名称但不同属性的节点

标签 python xml dom minidom


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

感谢您的帮助。

最佳答案

不确定您的代码哪里出了问题,因为您没有提供可测试的示例。我对 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>

关于python - 使用Python Dom向xml文件添加具有相同节点名称但不同属性的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5393557/

相关文章:

javascript - 使用 JavaScript 从 Html 字符串获取文本

python - python 包中的函数如何映射到正确的文件名?

python - 从 Pandas Dataframe 中每个 Id 的第一个时间戳中减去最后一个时间戳

xml - Biztalk 映射 : Grouping different nodes into a list

javascript - 将控制台答案导出到 xml

javascript - jQuery this 内部事件

PHP 简单 HTML Dom 只选择内部文本而不是子内部文本

python - Python 中的脚本切片

python - 验证所有请求的最佳方式?

ios - 将 JSON 数据发布到特定对象 iOS