Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.5可以';t通过minidom编写xml_Python_Xml - Fatal编程技术网

Python 3.5可以';t通过minidom编写xml

Python 3.5可以';t通过minidom编写xml,python,xml,Python,Xml,我是python和xml解析的新手,所以我花了大量时间(超过20个小时)在论坛中搜索,以找到如何实现我所追求的目标。我见过的大多数线程都有解决我问题的方法,但是它们都过时了,而且python版本不同,所以我不能使用它们;当我尝试时,它们不起作用 我想做的是: 解析xml 根据一定条件改变其内容 用这些更改重写整个xml,并保留新的xml格式 我使用的是: python 3.5 minidom和tkinter模块 以下是我在尝试写出新xml时遇到的错误: 这是xml.write(文件) A

我是python和xml解析的新手,所以我花了大量时间(超过20个小时)在论坛中搜索,以找到如何实现我所追求的目标。我见过的大多数线程都有解决我问题的方法,但是它们都过时了,而且python版本不同,所以我不能使用它们;当我尝试时,它们不起作用

我想做的是:

  • 解析xml
  • 根据一定条件改变其内容
  • 用这些更改重写整个xml,并保留新的xml格式
我使用的是:

  • python 3.5
  • minidom和tkinter模块
以下是我在尝试写出新xml时遇到的错误:

这是xml.write(文件)
AttributeError:“文档”对象没有属性“写入”

我尝试过ElementTree和lxml,但我在minidom方面取得了最大的进步,所以我更愿意使用它

这里(我认为)是相关的代码:

import tkinter
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
from xml.dom.minidom import parse
import xml
import os
import xml.dom.minidom

root = Tk()
root.withdraw()
file_path = filedialog.askopenfilename(filetypes=[("XML",".xml")])
filename, file_extension = os.path.splitext(os.path.basename(file_path))

if file_extension ==".xml":
    OutputFileName = filename[:-2] + "VS_" + filename[-2:] + "_NEW" + file_extension
    this_xml = xml.dom.minidom.parse(file_path)
    xml_contents = this_xml.documentElement

    #do stuff

    ofile = open(OutputFileName, 'wb')
    this_xml.write(ofile)  
    #xml_contents.write(ofile)
我肯定我在这里打了很多愚蠢的电话。在#dostuff部分,我读取某些节点数据,对其进行更改,然后打印结果。这些照片看起来不错,但现在我无法让这些变化形成


在我回到Python2.7之前(我看到的大多数演练/教程/示例都是基于Python2.7),我非常感谢您的帮助

出现此错误是因为
此xml
文档
,并且
文档
对象没有
写入()方法。请看下面的图片
xml.dom.minidom.parse()。您可能希望使用以下列出的方法之一将XML写入文件--
toxml()
toprettyxml()
文档
转换为可以写入文件的字符串,或
writexml()
直接写入XML:

with open("myfile.xml", "w") as xml_file:
    this_xml.writexml(xml_file)

还请注意,对于常规变量,不应使用大写的camelcase名称,如
OutputFileName
。该名称格式是为类名保留的。用Python编写这个变量名的惯用方法是
output\u file\u name

感谢您非常详细的回答,Ben!我修正了所有骆驼套的名字,并养成了避免使用它们的习惯。复制粘贴代码,将“myfile.xml”替换为“output\u file\u name”,我不会再收到任何错误。但是,我找不到该文件(我在整个驱动器中搜索了字符串output_file_name;我打印了(output_file_name)并进行了搜索。)理想情况下,我想使用toprettyxml来修复格式,但首先我想看看输出的xml是什么样子。我应该打开一个新线程吗?毕竟,由于您的帮助,错误确实已经修复了!有趣。所以我改为这样做了,xml显示得很好,比如:full_file_path=filedialog.askopenfilename(filetypes=[(“xml”,“.xml”)])file_path=os.path.dirname(full_file_path)+“/”和open(output_file_name,“w”)作为xml_文件:这个_xml.writexml(xml_文件)我甚至不需要预打印,这是一件好事,因为我遇到了外派人员的错误,而且看起来很完美。很乐意帮忙!由于您的代码为输出文件创建了相对路径,而不是绝对路径(即
foo.xml
而不是
/bar/baz/foo.xml
),因此该文件应写入您当前的工作目录,即运行程序的目录。谢谢您,先生。事实上你是对的。它一直坐在我的鼻子底下。(我从来没有想过要看那里,因为我在dos中运行所有东西。)首先,您可以安装Python2和Python3。因此,如果示例是为Python2编写的,那么没有理由不在Python2中尝试它们。然后,缺少一个最小但完整的示例,使您的问题偏离主题。在提取了您应该知道的最小示例之后,您不应该再写“这里(我认为)是…”,任何关心的人都应该能够获取代码并复制它。