Я использую xml.etree.ElementTree
для анализа и изменения файла xf utf-8. 2 проблемы связаны с тем, что файл написан в формате Unix, а не в Windows. Проблема 1 очевидна, окончание строк - \n
вместо \r\n
. Проблема 2 заключается в том, что строки utf-8 обрабатываются по-разному из-за разных форматов файлов (я предполагаю). Как заставить функцию write()
сохранять в формате файла Windows? Я в настоящее время используют write()
как:xml.etree пишет xml в файл неожиданным образом
# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import sys
altSpellingTree = ET.parse(sys.argv[2])
altSpellingRoot = altSpellingTree.getroot()
recordList = altSpellingRoot.findall("record") # Grab all <record> elements and iterate
for record in recordList:
# Check for the existence of an <alternative_spelling> element
alt_spelling_node = record.find("person").find("names").find("alternative_spelling")
if alt_spelling_node == None:
continue
else:
# Check if <alternative_spelling> element text is solely ","
if alt_spelling_node.text == ",":
alt_spelling_node.text = None # Remove the lone comma
altSpellingTree.write(sys.argv[2], encoding="utf-8", xml_declaration=True)
Третий вопрос заключается в том, что файл, который выводится использует самозакрывающиеся теги, где раньше было открытие и закрытие тегов (например <Country></Country>
становится <Country />
.). Есть ли способ избежать этого?
------- EDIT --------
Вот 2 образца, как XML выглядит, прежде чем программа запускается:
<Country></Country>
<Category_Type></Category_Type>
<Standard></Standard>
<names>
<first_name>Fernando</first_name>
<last_name>ROMERO AVILA</last_name>
<aliases>
<alias xsi:nil="true" />
</aliases>
<low_quality_aliases>
<alias xsi:nil="true" />
</low_quality_aliases>
<alternative_spelling>ROMERO ÁVILA,Fernando</alternative_spelling>
</names>
И те же 2 образца после того, как программа запускается .:
<Country />
<Category_Type />
<Standard />
<names>
<first_name>Fernando</first_name>
<last_name>ROMERO AVILA</last_name>
<aliases>
<alias xsi:nil="true" />
</aliases>
<low_quality_aliases>
<alias xsi:nil="true" />
</low_quality_aliases>
<alternative_spelling>ROMERO ÃVILA,Fernando</alternative_spelling>
</names>
Вы можете оставить часть вашего XML и вашей продукции, и что вы ожидаете увидеть? – Anzel
Yup. Я получил его работу на C#, теперь я просто смущен, почему python не будет сотрудничать со мной. – Josh
Одна вещь, которую я замечаю, после того, как вы разобрали 'altSpellingTree', вы никогда не меняли ее и просто« писали »в конце ... – Anzel