在 Python 中解析 XML 时出现编码问题
Posted
技术标签:
【中文标题】在 Python 中解析 XML 时出现编码问题【英文标题】:Problem with encoding while parsing XML in Python 【发布时间】:2021-12-15 08:19:01 【问题描述】:我正在尝试使用 python 解析 XML 文档,但我遇到了 书面口音 的问题,UTF-8 编码应该足够了。我已经看到了很多关于它的问题,但他们没有解决我的问题,她是我的代码:
def procesarXMLTohtml(archivoXML):
try:
f = open("generatedHTML.html", "w")
#Escribimos la cabecera del HTML y sus metadatos
writeHead(f)
f.write('<body>\n')
f.write('\t<h1> Presentacion de mi arbol genealogico hasta mis bisabuelos. </h1>\n')
try:
with open(archivoXML, 'r', 1, 'utf-8') as xml_file:
arbol = ET.parse(xml_file) #Parsea el fichero XML
except IOError:
print ('No se encuentra el archivo ', archivoXML)
exit()
except ET.ParseError:
print("Error procesando en el archivo XML = ", archivoXML)
exit()
raiz = arbol.getroot()
print("\nElemento raiz = ", raiz.tag)
if raiz.text != None:
print("Contenido = ", raiz.text.strip('\n')) #strip() elimina los '\n' del string
else:
print("Contenido = ", raiz.text)
print("Atributos = ", raiz.attrib)
# Recorrido de los elementos del árbol
for hijo in raiz.findall('.//'): # Expresión Path
if(hijo.tag == 'persona'):
f.write('\t\t<p> Persona: ' + hijo.attrib['nombre'] + ' ' + hijo.attrib['apellido'] + '</p>\n')
print("\nElemento = " , hijo.tag)
if hijo.text != None:
print("Contenido = ", hijo.text.strip('\n')) #strip() elimina los '\n' del string
else:
print("Contenido = ", hijo.text)
print("Atributos = ", hijo.attrib)
f.write('</body>\n')
f.write('</html>\n')
finally:
f.close()
忽略打印和其他许多事情,我认为问题出在那一行:
with open(archivoXML, 'r', 1, 'utf-8') as xml_file:
arbol = ET.parse(xml_file) #Parsea el fichero XML
HTML 文件看起来像这样,书写的重音符号显示不正确:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="keywords" content = "Arbol genealogico, Familia"/>
<meta name="author" content = "Diego Glez. Su�rez"/>
<title> Arbol Genealogico </title>
</head>
<body>
<h1> Presentacion de mi arbol genealogico hasta mis bisabuelos. </h1>
<p> Persona: Diego Gonz�lez Su�rez</p>
<p> Persona: Mar�a �ngeles Su�rez Fern�ndez</p>
<p> Persona: �ngeles Fern�ndez Prado</p>
<p> Persona: Adela Prado Prado</p>
<p> Persona: Belarmino Fern�ndez</p>
<p> Persona: Jos� Ram�n Su�rez Mu�iz</p>
<p> Persona: Mercedes Mu�iz Casero</p>
<p> Persona: Felix Su�rez</p>
<p> Persona: Juan Manuel Gonz�lez Garc�a</p>
<p> Persona: Mar�a Teresa Garc�a Garc�a</p>
<p> Persona: Oliva Garc�a Garc�a</p>
<p> Persona: Jos� Garc�a Men�ndez</p>
<p> Persona: Jos� Manuel Gonz�lez Fern�ndez</p>
<p> Persona: Visitaci�n Fern�ndez Fern�ndez</p>
<p> Persona: Manuel Gonz�lez</p>
</body>
</html>
【问题讨论】:
【参考方案1】:解决了: 当我创建输出文件时,需要指定编码。
f = open('generatedHTML.html', 'w', 1, 'UTF-8')
【讨论】:
以上是关于在 Python 中解析 XML 时出现编码问题的主要内容,如果未能解决你的问题,请参考以下文章
为啥在android应用程序中解析xml时出现nullpointerexception?
在 Android Studio 中使用 AsyncTask 解析在线 XML 文件时出现 NetworkOnMainThreadException