2009-06-11 5 views
10

Me han dado un archivo XML de muestra (en última instancia, mi cliente recibirá varios de estos cada día) y un archivo XSLT que aparentemente transformará el XML en algo con un diseño significativo, adecuado para mostrar en un navegador o imprimir.¿Cómo visualizo XML usando un documento XSLT en una aplicación Delphi?

Me gustaría poner algo en una aplicación Delphi heredada existente, de modo que el usuario pueda elegir uno de los archivos XML de la unidad y 'mostrarla' (en un TWebBrowser o similar).

No tengo idea de por dónde empezar, y Google delphi, xml y xslt me ​​dan ejemplos que parecen ser basados ​​en datamodule/database; Solo quiero transformar un archivo XML dado en algo en la pantalla. Parece que podría involucrar a un PageProducer, pero no entiendo qué debo hacer. ¿Alguien ofrece punteros, o tal vez un enlace a un tutorial rápido?

¡Muchas gracias!

+0

Ok, esto ha despertado cierto interés desde un par de programadores de Delphi compañero así que voy a hacer un punto de volver aquí en los próximos días y publicar un ejemplo de cómo lo hice funcionar (cuando lo hago). :-) – robsoft

+0

El consejo de Kieveli sobre agregar la referencia de la hoja de estilo en el documento fue muy útil, ya que ahorró tiempo al probar y verificar cosas. El consejo de Ken hizo el truco, teniendo en cuenta el cambio que se observa en sus comentarios. – robsoft

Respuesta

9
Uses 
    XMLDoc, XMLIntf; 

function Transform(XMLContent : string; XSLContent : string) : WideString; 
var 
    XML : IXMLDocument; 
    XSL : IXMLDocument; 
begin 

    XML := LoadXMLData(XMLContent); 
    XSL := LoadXMLData(XSLContent); 

    XML.DocumentElement.TransformNode(XSL.DocumentElement, Result) 

end; 
+0

No se pudo obtener el formato de muestra de código para que funcione. Estoy usando IE 8. ¿Tal vez esa es la razón? –

+1

En el ejemplo anterior, XMLContent es el XML que recibirá y XSLContent es el XSLT. Usamos esto para producir páginas HTML a partir de plantillas de documentos XML. Pero la salida es lo que genera el XSLT. No se necesitan componentes de terceros. Utiliza el analizador XML Delphi predeterminado. (MSXML) –

+0

Para ayudar a cualquiera: utilicé esto y necesitaba que llame a CoInitialize (nil) antes de llamar a la función de transformación y llamar a CoUnInitialize(); después de liberar la memoria. Para usar esas funciones, debe agregar ActiveX y Windows a la cláusula uses. – Jonathan

6

Utilicé una biblioteca MSXML para hacer la transformación XSLT en Delphi. Fue hace mucho tiempo. ¡Trabajado como un encanto!

No estoy seguro de qué formato de salida generará su XSLT, pero saberlo le ayudará a descubrir cómo mostrarlo. Generamos HTML a partir de XML a través de XSLT, y lo mostramos utilizando un control de ActiveX Web Browser (IE) en un panel de nuestra aplicación.

Aquí hay un link on MSSXML and Delphi que podría ayudar.

BTW: Si esta es la primera vez que trabaja con XSLT, puede editar manualmente un archivo XML y agregar una directiva para que se muestre utilizando un XSLT específico. Cuando abras el XML en Firefox después de la edición, se aplicará el XSLT y te mostrará cuál será el resultado de tus llamadas a MSXML. Aquí está la línea de agregar manualmente a la xml:

<?xml-stylesheet type="text/xsl" href="myStyleSheet.xsl"?> 
+0

¡Gracias por esto! Cuando edito el documento XML como sugieres, obtengo un cambio en la apariencia, pero claramente no está utilizando la información en el documento XSLT correctamente; Me pregunto si realmente no coinciden y, por lo tanto, la transformación no funciona porque no está encontrando las entidades a las que se refiere el XSLT. Volveré con el cliente y pediré un poco más de ayuda. Gracias por ayudarme a comenzar, realmente lo aprecio. – robsoft

+0

_ "y le mostrará cuál será el resultado de sus llamadas MSXML" _ >> no, cuando aplica su hoja de estilo de esa manera y la muestra a través de Firefox, ** la [TransformiiX] (https: //en.wikipedia .org/wiki/TransforMiiX) se usa el procesador, no MSXML. ** – Abel

2

Si necesita sólo transformaciones, puede utilizar TXMLDocument, guardar en disco y que mostrará el resultado en un TWebBrowser (a través de Navigate('file:///...')).

Personalmente tuve algunos problemas con MSXML, así que comencé a usar DIXML.

+0

+1 para el enlace DIXML, que parece realmente útil. Todavía no he explorado este problema correctamente pero espero poder hacer algo simple solo con un par de componentes estándar, ¡así que gracias por la sugerencia! – robsoft

1

Puede intentar instalar el AltovaXML, se puede llamar como COM +. Es gratuito y se puede descargar desde: http://www.altova.com/altovaxml.html

msxml puede sólo funciona con XSLT 1.0, pero AltovaXML puede trabajar con XSLT 2.0

+0

cambió el nombre a RaptorXML y no es gratuito, por lo que puedo ver (eitehr lo escondieron bien, o solo están disponibles las descargas de prueba) – ciuly

Cuestiones relacionadas