Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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:xml.etree.elementtree.elementtree.write()声明标记_Python_Xml - Fatal编程技术网

python:xml.etree.elementtree.elementtree.write()声明标记

python:xml.etree.elementtree.elementtree.write()声明标记,python,xml,Python,Xml,我使用XML.etree.elementtree.Element创建了一个XML文档,并希望使用elementtree.write()函数打印它 但是出现的声明标签是 <?xml version='1.0' encoding='UTF-8'?> 而我需要用双引号。有什么办法可以改变这一点吗?我不得不做几乎相同的事情,除了另一种方法,因为各种$workplace工具中的黑客需要单引号,而python的ElementTree.write则使用双引号。(有一段代码查找文本字符串sta

我使用XML.etree.elementtree.Element创建了一个XML文档,并希望使用elementtree.write()函数打印它 但是出现的声明标签是

<?xml version='1.0' encoding='UTF-8'?>


而我需要用双引号。有什么办法可以改变这一点吗?

我不得不做几乎相同的事情,除了另一种方法,因为各种$workplace工具中的黑客需要单引号,而python的
ElementTree.write
则使用双引号。(有一段代码查找文本字符串
status='ok'
,但无法识别
status=“ok”
。是的,该代码在几个方面都是错误的,但我必须解决它。)

幸运的是,“用户数据”单引号或双引号被编码为
&apos
(分别)。在我的情况下,我已经在使用
tostring
而不是
write
(出于其他原因),因此我:

import xml.etree.ElementTree as ET
# [... mass snippage]
        text = ET.tostring(reply).replace('"', "'")
        # [... snippaage]
        self.wfile.write(text)

(显然您需要替换(“'”,““”)。

最终我使用了tostring函数并将XML附加到正确的标记中 然后是python file.write函数。
它很难看(而且我对文件的实际编码撒谎),但它是有效的。

我也有同样的问题,查看了ElementTree.py的代码,看到了以下内容

对于根标记(单引号):

它是这样硬编码的

我(本地)将其更改为:

“\n”

所以现在每个属性都被双引号引用。

我做了与bg1987相同的事情。这是我写的函数,以防对某人有用

def wrTmp(treeObject, filepath):
    xml_str = ('<?xml version="1.0" encoding="UTF-8"?>' + '\n' + xml.etree.ElementTree.tostring(treeObject.getroot(), method='xml'))
    with open(filepath, 'wb') as xml_file:
         xml_file.write(xml_str)
def wrTmp(treeObject,filepath):
xml_str=(“”+'\n'+xml.etree.ElementTree.tostring(treeObject.getroot(),method='xml'))
将open(filepath,'wb')作为xml_文件:
xml_file.write(xml_str)
另一种方法是(如果您还想漂亮地打印xml),使用
minidom.toprettyxml(encoding=“UTF-8”)
,它将xml和编码声明放在双引号中:

        if method == "xml":
            write("<?xml version='1.0' encoding='%s'?>\n" % encoding)
write(" %s=\"%s\"" % (qnames[k], v))
from xml.dom import minidom
xmlDom = minidom.parse("my_file.xml")

prettyXML = xmlDom.toprettyxml(encoding="UTF-8")

myfile = open(fileName, mode="wb")
myfile.write(prettyXML)
myfile.close()

呃…为什么你需要双引号?为什么这很重要?带单引号或双引号的xml同样有效。因为这是一个作业,而且出于某种原因,老师会对xml进行区分。单引号是在
write
方法中硬编码的,因此无法更改它们。你所能做的就是在单词后面修改它们。@TimPietzcker这里有一个来自野外的例子:(包括双引号),如果在正确的位置找不到备份文件,它会将备份文件视为无效。问题是一些单引号值可能包含双引号。简单的替换可能会破坏内容。@pepr:我同意理论上的可能性,但在我的所有测试中(当然是针对我的数据的测试,可能还有安装的python库),
xml.etree.ElementTree
始终将双引号编码为
如果他们被允许在这个位置。你能提供你编写的代码来解决这个问题吗?在Python 3+中,你也需要对字符串文本进行编码:
'\n'.encode()
from xml.dom import minidom
xmlDom = minidom.parse("my_file.xml")

prettyXML = xmlDom.toprettyxml(encoding="UTF-8")

myfile = open(fileName, mode="wb")
myfile.write(prettyXML)
myfile.close()