2016-05-24 15 views
-2

Ich habe eine XML-Datei wie folgt:Wie fügt man <!DOCTYPE> zum Start einer XML-Datei mit Python2.5 hinzu?

<sample> 
    <attributes> xyz 
    </attributes> 
    </sample> 

ich zum Ausgangs von xml hinzufügen möchten:

<!DOCTYPE sample SYSTEM "location/sample.dtd"> 

ich Python 2.5 nur verwenden. Also, kann jemand bitte vorschlagen, wie kann ich das haben. Ich möchte endgültige XML-Datei sein:

<sample> 
    <!DOCTYPE sample SYSTEM "location/sample.dtd"> 
    <attributes> xyz 
    </attributes> 
    </sample> 
+0

es in Ordnung wäre, wenn man die ganze Datei neu geschrieben, oder müssen Sie nach einfügen? – WildCard

+0

@WildCard Ich bin in Ordnung mit beiden, können Sie vorschlagen, eine dieser – Learner

+0

System ist eine Variable? – WildCard

Antwort

-1

der folgende Code schreiben und oder file.xml im aktuellen Verzeichnis Ihrer Python-Skript überschreiben .. Wenn Sie file.xml in ein bestimmtes Verzeichnis schreiben möchte lassen Ich weiß es.

from __future__ import with_statement 



with open('file.xml', 'w') as file: 
    file.write(r''' 
<sample> 
<!DOCTYPE sample SYSTEM "location/sample.dtd"> 
<attributes> xyz 
</attributes> 
</sample>''') 
+0

eigentlich die Lösung, die Sie zur Verfügung stellen, ist ok, wenn XML-Datei klein ist, aber die tatsächliche XML ist ziemlich riesig und Hinzufügen von dtd-Informationen wie das ist nicht so sauber Weg. Also, gibt es irgendeinen sauberen Weg, wo ich keine vollständige XML-Datei bereitstellen muss und juzt die Zeile nein sagen muss. Wo kann ich dtd hinzufügen? – Learner

+0

ok, ich kann damit arbeiten. Ich weiß nicht viel über die Datei, die Sie schreiben, wie oft kommt in der Datei vor? – WildCard

+0

Ich bin mir ziemlich sicher, dass er den Doctype in eine beliebige XML-Datei einfügen möchte. Das Schreiben eines festen XML ist ziemlich nutzlos. –

0

Als Verallgemeinerung der vorherigen Antwort:

fp = open(xml_filepath, 'r') 
content = fp.readlines() 
fp.close() 

final_content = content[:1] 
final_content.append('<!DOCTYPE sample SYSTEM "location/sample.dtd">') 
final_content.extend(content[1:]) 

fp = open(xml_filepath, 'w') 
fp.writelines(final_content) 
fp.close() 
+0

Und wenn Sie den Inhalt in einer anderen Linie als die zweite einfügen wollen, sagen wir mal in (n + 1) -te Position: content = Inhalt [: n] .append ('...') erweitern (. Inhalt [n:]) – Schmouk

+0

ich tat, wie Sie sagten, aber erhalten Fehler als "Str" Objekt hat kein Attribut "append" – Learner

+0

ok. Mein Fehler ist ein Tippfehler. Die Lösung sollte lauten: content = content [: 1] .append ('...'). Extend (Inhalt [1:]), genau wie im vorherigen Kommentar, wobei 'n' durch '1' ersetzt wird. content [0] ist eigentlich eine Zeichenkette, während content [: 1] eine Liste ist, die nur das erste Element der vorherigen Liste enthält. – Schmouk