【问题标题】:Writing XML File - Multiple Tags Based on Variables编写 XML 文件 - 基于变量的多个标签
【发布时间】:2012-11-08 17:56:40
【问题描述】:

我在 Python 中使用 minidom(以及其他)从目录中提取文件列表,获取它们的修改时间,其他杂项。数据,然后将该数据写入 XML 文件。数据打印得很好,但是当我尝试将数据写入文件时,我只获取目录中一个文件的 XML。这是我的代码(为了可读性/空间,我删除了大量的 createElementappendChild 方法以及任何不相关的变量):

for filename in os.listdir((os.path.join('\\\\10.10.10.80\Jobs\success'))):

    doc = Document()
    modTime = datetime.datetime.fromtimestamp(os.path.getmtime('\\\\10.10.10.80\Jobs\success\\'+filename)).strftime('%I:%M:%S %p')
    done = doc.createElement('Printed Orders')
    doc.appendChild(done)
    ordernum = doc.createElement(filename)
    done.appendChild(ordernum)
    #This is where other child elements have been removed

    print doc.toprettyxml(indent='  ')
    xmlData = open(day_path, 'w')
    xmlData.write(doc.toprettyxml(indent='  '))

希望这足以了解发生了什么。由于print 返回了我期望的值,我认为 write 函数是我出错的地方。

【问题讨论】:

    标签: python xml


    【解决方案1】:

    如果我明白你的意思

    您不能为每个文件创建一个不同的文档,因此您必须将文档的创建和 xml 文件的编写放在循环之外

    from xml.dom.minidom import Document 
    import os,datetime
    path = "/tmp/"
    day_path ="today.xml"
    doc = Document()
    done = doc.createElement('Printed Orders')
    
    for filename in os.listdir((os.path.join(path))):
    
        print "here"
        modTime = datetime.datetime.fromtimestamp(os.path.getmtime(path+filename)).strftime('%I:%M:%S %p')
        doc.appendChild(done)
        ordernum = doc.createElement(filename)
        done.appendChild(ordernum)
        #This is where other child elements have been removed
    
    print doc.toprettyxml(indent='  ')
    xmlData = open(day_path, 'w')
    xmlData.write(doc.toprettyxml(indent='  '))
    

    编辑: 对于 HierarchyRequestErr 错误,您还必须将根元素的创建放在循环之外

    【讨论】:

    • 这是我的意图,一个包含所有数据的文件(最终它将是每天创建一个文件)我尝试了你的建议,但输出文件仍然只包含@中一个文件的 XML 987654322@ 最重要的是,print 也只返回一个文件,而之前它返回了所有文件。此外,将doc = Document() 移出循环会返回错误:HierarchyRequestErr: two document elements disallowed
    • 下次创建一个自给自足的例子,这样我们就可以轻松测试了
    • 感谢@Xavier Combelle 在移动根元素的创建后一切正常。下次我会确保提供一个对测试更友好的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多