Pasar de Word a XML (2)

Este artículo es una continuación de otro anterior con el mismo título, en el que se explicaba una forma rápida de conseguir un proyecto básico XML a partir de un documento Word 2000.

Me imagino que los lectores del anterior artículo habrán quedado un poco (¿un mucho?) decepcionados, ya que el resultado de la transformación de Word a XML era muy limitada.

En este artículo se va a comentar otro de los posibles procesos para realizar la conversión de formato DOC de Word a XML, aunque también puede servir como método para transformar un documento con un lenguaje de marcas determinado en el mismo documento con cualquier otro modelo de marcado.

En esta ocasión se van a comentar algunas de las posibilidades de automatización que ofrece Word 2000 para transformar un código típico HTML en otro XML, lo que permite un control de su formato por medio de cualquier proceso usual de visualización, como las hojas de estilo en cascada CSS o XSL.

Otro objetivo secundario de este artículo es que se conozcan algunas de las herramientas de automatización que soporta Word 2000.

Notas: Para comprobar los ejemplos que siguen a continuación, es imprescindible disponer de Internet Explorer 5.

Introducción

Word 2000 es una herramientas muy potente (por algo se ha impuesto como estándar), capaz de realizar muchas tareas de automatización con gran facilidad.

Las tareas de automatización más conocidas son las que permiten realizar búsquedas, reemplazamientos y cálculos, aunque también es capaz de ejecutar acciones condicionadas.

Otra cuestión que nos interesa especialmente es la facilidad que tiene Word de grabar, modificar y ejecutar macros, ya sea a través de procesos automáticos, o mediante el control de su potente lenguaje interno Visual Basic for Applications (VBA).

Si disponemos de una herramienta tan potente, ¿por qué no la podemos aprovechar para que automatice la transformación de un documento HTML en otro XML?.

Veamos cómo hacerlo.

Reemplazamiento de términos

En primer lugar, vamos a recuperar el archivo HTML que habíamos conseguido en el artículo anterior después de convertir el documento original DOC en HTML y depurarlo mediante HTML-Kit. El archivo de partida es el denominado articulo_promocion_4.htm.

Vamos a abrir el código de este archivo desde el Bloc de notas de Windows 9x/Me (el Bloc de Notas de Windows 2000 tiene características propias, según se indica en la sección P & R XML y en el artículo Codificación XML). Cuando tengamos el código visible en la ventana del Bloc de notas, lo seleccionamos todo (Edición > Seleccionar todo) y lo pasamos al Portapapeles con la secuencia Edición > Copiar.

Activamos ahora Word 2000 con un documento en blanco e insertamos el contenido del Portapapeles mediante Edición > Pegar, obteniendo así un documento Word que incluye el código HTML del archivo utilizado como partida del proceso, como se puede ver en la figura 1.

Ya podemos aprovechar las herramientas de Word 2000 con nuestro código, siendo muy fácil sustituir cualquier etiqueta del HTML por otra de XML, y así por ejemplo, si deseamos reemplazar <i> por <cursiva>, solo se precisa activar Edición > Reemplazar..., poner <i> en la casilla Buscar:, teclear <cursiva> en la casilla Reemplazar con: y pulsar sobre el botón Reemplazar todos, lo que obliga a Word a realizar automáticamente todo el trabajo de sustitución de dichas etiquetas.

Repitiendo el proceso para las correspondientes etiquetas de cierre </i> y </cursiva>, se consigue terminar el proceso de sustitución.

Bien, ya solo queda repetir el mismo sistema para cada una de las etiquetas que se desean reemplazar, y asunto concluido.

Por supuesto que este procedimiento es eficaz, pero también es bastante pesado, por lo que vamos a ver si hay forma de evitar este trabajo repetitivo.

Nota: Si el lector ha realizado las sustituciones indicadas de <i> por <cursiva>, para seguir con este artículo debe deshacer las operaciones (Edición > Deshacer) para dejar el código en su estado original.

Macro de reemplazamiento

Los lectores capaces de confeccionar aplicaciones con Visual Basic no deben tener problemas especiales para crear una utilidad que permita realizar la sustitución de etiquetas HTML por otras XML particulares, pero ¿qué pasa con los que no conocen las posibilidades del Visual Basic?. Pues solo tienen que seguir leyendo.

Word 2000 dispone de una herramienta capaz de generar código Visual Basic de forma automática, con la que el usuario solo debe indicar las acciones que desea realizar y dejar que Word realice el trabajo. Estas grabaciones de acciones se denominan macros y vamos a ver cómo funcionan.

Vamos a suponer que deseamos crear una macro que realice el trabajo de sustituir las etiquetas <i> por <cursiva>, o lo que es lo mismo, vamos a pedir a Word que genere una aplicación Visual Basic que realice esta operación de forma automática.

Para ello, hay que dar la orden de que se empiece a grabar la acción mediante Herramientas > Macro > Grabar nueva macro..., lo que da lugar a la aparición de la ventana de diálogo Grabar macro. Ahora podemos poner un nombre descriptivo a nuestra macro, por ejemplo: Mcursiva, y pulsar sobre el botón Aceptar (figura 2).

Después de ésto aparecerá una barra de herramientas específica de Macros y el cursor se cambiará a una flecha con una grabadora, indicando que ha empezado la grabación.

Es el momento de realizar las acciones que hemos visto anteriormente para conseguir el reemplazamiento de las etiquetas <i> y </i> por <cursiva> y </cursiva>, después de lo cual, hay que parar la grabación mediante Herramientas > Macro > Detener grabación.

A partir de ahora, siempre que deseemos realizar sustituciones de <i> por <cursiva>, es suficiente con activar la secuencia Herramientas > Macro > Macros..., seleccionar la macro Mcursiva en el listado que aparece en la ventana de diálogo Macros y pulsar sobre el botón Ejecutar.

Nota: Para comprobar el funcionamiento de Mcursiva, hay que devolver el código a su estado original antes de activar la macro.

Código de Visual Basic

Para ver el código Visual Basic correspondiente a la macro Mcursiva, hay que activar la secuencia Herramientas > Macro > Macros..., seleccionar Mcursiva en el listado que muestra la ventana de diálogo Macros y pulsar sobre el botón Modificar.

Con el proceso anterior se activa la aplicación denominada Microsoft Visual Basic, que es un editor especializado en el tratamiento de código Visual Basic (figura 3).

El código correspondiente a nuestra macro es el siguiente:

Sub Mcursiva()
'
' Mcursiva Macro
' Macro grabada el 14/11/2000 por Ramón Montero
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "<i>"
        .Replacement.Text = "<cursiva>"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "</i>"
        .Replacement.Text = "</cursiva>"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Aunque no vamos a profundizar en los detalles del código, es fácil observar que las líneas que realizan la labor de la sustitución de las etiquetas son:

With Selection.Find
        .Text = "..."
        .Replacement.Text = "..."
        ......
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

Por lo que es muy fácil aumentar el código de la macro desde el mismo editor seleccionando las líneas anteriores, copiándolas al Portapapeles (con [CONTROL]+[C], por ejemplo), y pegándolas al final del código (con [CONTROL]+[V]), justo delante de la última línea:

End Sub

para a continuación modificar la etiqueta HTML que se desea quitar (.Text = "...") por la que se desea incorporar para XML (.Replacement.Text = "...").

Con este sistema podemos aprovechar la misma macro para que haga la sustitución de <b>]]</codigenlinea> por <codigoenlinea><![CDATA[<negrita>, <p> por <párrafo>, etc., ya que solo se precisa añadir grupos de líneas de código con las correspondientes especificaciones de las etiquetas afectadas.

Vemos pues cómo conseguir una utilidad Visual Basic todo lo compleja que se desee, que habrá que guardar desde el propio editor para que pueda ser utilizada desde Word 2000.

Conclusiones

Con esta solución, basada en una macro de Word, se puede generar un código XML a medida del usuario, partiendo de un código HTML.

El código así obtenido en Word, debe seleccionarse, copiarse al Portapapeles, pegarse al Bloc de notas de Windows (o a cualquier otro editor de textos ASCII) y guardarse con el nombre de archivo XML adecuado.

Quiero recordar también que esta solución es muy útil para realizar la sustitución automatizada de todas las referencias en ASCII-7 bits por los correspondientes caracteres hispanos, o viceversa. Siendo suficiente con crear una macro en la que existan búsquedas de referencias &aacute;, &Eacute;, &ntilde;, etc. con reemplazamientos por á, É, ñ, etc.

Aunque hay aplicaciones comerciales que realizan este trabajo con más eficacia que el método comentado en este artículo, las posibilidades de la actuación de macros de sustitución no son despreciables, como se podra ver en la última parte de este artículo.

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
ARTÍCULO ANTERIOR

¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.