将XML格式的文本写入Python中的输出文件

时间:2017-12-12 02:53:37

标签: python xml

将以下XML写入输出文件时遇到问题。

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="CoreNLP-to-HTML.xsl" type="text/xsl"?>
<root>
 <document>
  <sentences>
   <sentence id="1">
    <tokens>
     <token id="1">
      <word>
       Pusheen
      </word>
      <CharacterOffsetBegin>
       0
      </CharacterOffsetBegin>
      <CharacterOffsetEnd>
       7
      </CharacterOffsetEnd>
      <POS>
       NNP
      </POS>
     </token>
    </tokens>
   </sentence>
  </sentences>
 </document>
</root>

如何以xml格式将其写入输出文件?我尝试使用下面的写声明

tree.write(open('person.xml', 'w'), encoding='unicode'). 

但是,我收到以下错误

AttributeError: 'str' object has no attribute 'write' 

我不必在这里构建XML,因为我已经拥有XML格式的数据。我只需要它将它写入XML文件。

2 个答案:

答案 0 :(得分:0)

假设tree是您的XML,它是一个字符串。你可能想要这样的东西:

with open("person.xml", "w", encoding="unicode") as outfile:
  outfile.write(tree)

(对文件使用with是一种好习惯;它会自动关闭它们)

错误的原因是,由于tree是一个字符串,因此无法写入。

答案 1 :(得分:0)

我建议先使用lxml模块检查格式,然后将其写入文件。我注意到你有两个具有相同 id 的元素,引起了我的注意。它没有标记XML中的错误,但它可能会导致HTML页面出现问题,其中每个 id 应该是唯一的。
这是执行上述描述的简单代码:

from lxml import etree
try:
    root = etree.fromstring(your_xml_data) # checks XML formatting, returns Element if good
    if root is not None:
        tree = etree.ElementTree(root)  # convert the Element to ElementTree
        tree.write('person.xml')        # we needed the ElementTree for writing the file
except:
    'Oops!'