English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Método de implementación para convertir archivos xml en archivos html utilizando Python

功能就是题目所述,我的python2.7,装在windows环境,我使用的开发工具是wingide 6.0

1、首先是我设计的简单的一个xml文件,也就是用来解析的源文件

下面是这个文件website.xml内容:

<website>
<page name="index" title="[#1#]">
	<h1>welcome to</h1>
	<p>this is a moment</p>
<ul>
<li><a href="shouting.html" rel="external nofollow" >Shouting</a></li>
</ul>
</page>
<page name="shouting" title="[#2#]">
<h1>My name is likeyou</h1>
</page>
</website>

解释:page就是对应一个html文件,这里有两个page也就是要解析成两个html文件,然后分别是index.html和shouting.html,其中在index.html中通过<a>链接转到shouting.html文件中显示shouting.html文件的内容

2、python代码实现解析(xmltest.py)

#!D:\Python27\python.exe
#-*- coding:utf-8 -*-
from xml.sax import parse
from xml.sax.handler import ContentHandler
class PageCreate(ContentHandler):
 pagethrough = False
 def startElement(self, name, attrs):
  if name == 'page':
   self.pagethrough = True
   self.out = open(attrs['name']) + '.html', 'w')
   self.out.write('<html>
<head>
')
   self.out.write('<title>%s<'/title>\n' %(attrs['title']))
   self.out.write('<')/head>\n<body>\n')
  elif self.pagethrough:
   self.out.write('<')
   self.out.write(name)
   for str,val in attrs.items():
    self.out.write(' %s="%s"' %(str, val))
   self.out.write('>') 
 def endElement(self, name):
  if name == 'page':
   self.out.write('<')/body>\n</html>')
   self.pagethrough = False
   self.out.close()
  if self.pagethrough:
   self.out.write('<')
   self.out.write('/' + name)
   self.out.write('>')
 def characters(self, content):
  if self.pagethrough:
   self.out.write(content)
parse('D:\\pyproject\\file\\website.xml', PageCreate())

Explicación del código:

La explicación del código: se llama al método parse de la clase xml.sax para analizar, se crea una clase de análisis, que hereda de ContentHandler, y se reescriben los métodos startelement y endelement y charactors, el método startelement se llama cuando se encuentra la etiqueta de inicio en el archivo xml, como <a> y <h1> La variable passthrough se utiliza para determinar si se encuentra dentro de la etiqueta page, true indica que se encuentra dentro de la etiqueta page, es decir, es un elemento perteneciente a la página actual. Dado que xml.sax se centra en las etiquetas, no tiene en cuenta si se encuentra en el page actual o no, luego el código siguiente es fácil de entender, es decir, agregar las etiquetas de inicio de html <html><head><body> y otros, atención, attrs almacena las propiedades de la etiqueta, por ejemplo, en <page> name="shouting" y name="index", por lo que attrs almacena este objeto name="shouting", de modo que se puede obtener el nombre shouting e index dentro de la propiedad name como nombre del archivo del archivo html, de manera similar, el href=…… en <a> también se obtiene mediante estos datos, que existen en las variables str y val, y se escriben en el archivo mediante write.

luego endelement es cuando se alcanza </h1>este tipo de etiquetas de finalización se llama, se agrega la etiqueta de finalización, si es el final del archivo, entonces es </page>,en ese momento se agrega </html>、</body>agregar las etiquetas de finalización de estos html, de lo contrario, son las etiquetas de finalización de los elementos dentro de la página

characters es agregar la cadena entre las etiquetas de inicio y final

Después de ejecutar el código de python, podemos ver que se han generado dos archivos html en el mismo directorio,分别是shouting.html和index.html,abriendo index.html podemos ver un enlace llamado “shouting”,haciendo clic en él se abrirá shouting.html

La implementación de la conversión de archivos xml a html utilizando python que se comparte en este artículo es todo lo que tiene el editor. Esperamos que esto les sirva de referencia y esperamos que todos apoyen a la tutorial de alarido.

Declaración: El contenido de este artículo se ha obtenido de Internet, pertenece a los propietarios originales, ha sido contribuido y subido por usuarios de Internet, este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a notice#w.3Aviso: Si encuentra contenido sospechoso de infracción de derechos de autor en este sitio, envíe un correo electrónico a notice#w para denunciar, proporcionando evidencia relevante. Una vez confirmada la infracción, este sitio eliminará inmediatamente el contenido sospechoso.

Tutorial de Elasticsearch