2016-05-24 4 views
-2

У меня есть файл XML следующим образом:Как добавить <!DOCTYPE> в начало файла xml с помощью python2.5?

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

Я хочу добавить к запуску XML:

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

Я должен использовать только питон 2.5. Итак, кто-нибудь может предложить, как я могу это получить. Я хочу, чтобы конечный файл XML, чтобы быть:

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

бы это хорошо, если вы переписали весь файл, или же вам нужно вставить после ? – WildCard

+0

@WildCard, я в порядке с обоими, вы можете предположить, что любой из этих – Learner

+0

является системной переменной? – WildCard

ответ

-1

следующий код будет писать и переписывать или file.xml в текущем каталоге вашего питона скрипт .. если вы хотите написать file.xml в определенной директории пусть я знаю.

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

На самом деле решение, которое вы предоставляете, в порядке, если файл xml невелик, но фактический xml довольно большой, и добавление dtd-информации вроде этого не так чисто. Итак, есть ли какой-либо чистый способ, когда мне не нужно предоставлять полный xml, а juzt - указать строку нет. где добавить dtd. – Learner

+0

нормально, я могу с этим работать. Я не знаю много о файле, который вы пишете, сколько раз в файле происходит ? – WildCard

+0

Я уверен, что он хочет вставить doctype в произвольный файл XML. Написание фиксированного XML совершенно бесполезно. –

0

Как обобщение предыдущего ответа:

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

И если вы хотите вставить содержимое в любую другую строку, чем вторую, скажем, в (n + 1) -й позиции: content = content [: n] .append ('...'). Extend() content [n:]) – Schmouk

+0

Я сделал, как вы сказали, но получив ошибку, поскольку объект 'str' не имеет атрибута 'append' – Learner

+0

ok. Моя ошибка - опечатка. Решение должно читать: content = content [: 1] .append ('...'). Extend (content [1:]), как и в предыдущем комментарии, заменяя 'n' на '1'. content [0] - это действительно строка, а content [: 1] - список, содержащий только первый элемент предыдущего списка. – Schmouk