2017-12-12 2 views
-1

Ich habe Probleme beim Schreiben der folgenden XML-Datei zur Ausgabe.Schreiben von XML-formatierten Text in Python-Ausgabedatei

<?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> 

Wie dies in xml Format Ausgabedatei zu schreiben? Ich habe versucht, unter Schreib Anweisung

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

Aber, ich bin die folgenden Fehler bekommen

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

ich nicht XML bauen müssen hier wie ich haben bereits die Daten im XML-Format. Ich brauche es nur, um es in eine XML-Datei zu schreiben.

+0

Wenn Sie * * wurden, diesen Weg zu gehen, würden Sie 'open (‚Person.xml‘,‚w‘) wollen schreiben (Baum) ' – Gary02127

Antwort

0

Angenommen, dass tree Ihr XML ist, ist es eine Zeichenfolge. Sie wollen wahrscheinlich so etwas wie:

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

(Es ist gute Praxis with für Dateien zu verwenden, sie schließt sie automatisch nach)

Der Fehler verursacht durch die Tatsache, dass, da tree ist eine Zeichenfolge, Sie kann nicht schreiben.

+0

Vielen Dank für Ihre Eingaben. Es funktionierte, obwohl mit wenig Modifikation. mit open ("output.xml", "w") als outfile: outfile.write (pretty_bs) –

+0

Wahrscheinlich wollen Sie 'encoding =" utf-8 "' –

0

Ich empfehle die Verwendung des Moduls lxml, um das Format zuerst zu überprüfen und dann in eine Datei zu schreiben. Ich merke, dass Sie zwei Elemente mit der gleichen ID haben, die mein Auge gefangen hat. Es kennzeichnet keinen Fehler in XML, aber es könnte Probleme auf einer HTML-Seite verursachen, wo jeder id sollte eindeutig sein.
Hier ist der einfache Code zu tun, was ich oben beschrieben.

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!' 
+0

Vielen Dank für den Vorschlag. Wird die lxml verwenden, um das Format zu prüfen. –

Verwandte Themen