2009-06-11 10 views
10

J'ai reçu un exemple de fichier XML (en fin de compte, mon client recevra plusieurs d'entre eux chaque jour), et un fichier XSLT qui transformera apparemment le XML en quelque chose avec une mise en page significative. Je voudrais mettre quelque chose dans une application Delphi existante existante, de sorte que l'utilisateur puisse choisir un des fichiers XML du lecteur et «l'afficher» (dans un TWebBrowser ou similaire).Comment afficher du code XML à l'aide d'un document XSLT dans une application Delphi?

Je n'ai aucune idée par où commencer, et googling delphi, xml et xslt me ​​donne des exemples qui semblent être basés sur la base de données/datamodule; Je veux juste transformer un fichier XML donné en quelque chose à l'écran. Il semble que cela pourrait impliquer un PageProducer mais je n'arrive pas à comprendre ce que je dois faire. Quelqu'un offre des pointeurs, ou peut-être un lien vers un tutoriel rapide?

Merci beaucoup!

+0

Ok, cela a éveillé un certain intérêt de quelques programmeurs Delphi collègues donc je vais faire un point de revenir ici dans les prochains jours et d'afficher un exemple de comment je l'ai fait fonctionner (quand je le fais). :-) – robsoft

+0

L'astuce de Kieveli à propos de l'ajout de la référence de la feuille de style dans le document était vraiment utile, car elle permettait de gagner du temps lors des tests et des vérifications. Le conseil de Ken a fait l'affaire, en tenant compte du changement noté dans ses commentaires. – robsoft

Répondre

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

La mise en forme de l'exemple de code n'a pas pu fonctionner. J'utilise IE 8. Peut-être que c'est la raison? –

+1

Dans l'exemple ci-dessus, XMLContent est le XML que vous allez recevoir et XSLContent est le XSLT. Nous l'utilisons pour produire des pages HTML à partir de modèles de documents XML. Mais la sortie est tout ce que le XSLT génère. Aucun composant tiers requis. Utilise l'analyseur XML Delphi par défaut. (MSXML) –

+0

Juste pour aider n'importe qui: J'ai utilisé ceci et il m'a fallu appeler CoInitialize (nil) avant d'appeler la fonction de transformation et appeler CoUnInitialize(); après pour libérer la mémoire. Pour utiliser ces fonctions, vous devez ajouter ActiveX et Windows à la clause uses. – Jonathan

6

J'ai utilisé une bibliothèque MSXML pour effectuer la transformation XSLT dans Delphi. C'était il y a longtemps. Travaillé comme un charme!

Je ne suis pas sûr du format de sortie que votre XSLT va générer, mais sachant que cela vous aidera à comprendre comment l'afficher. Nous avons généré du code HTML à partir de XML via XSLT et l'avons affiché à l'aide d'un contrôle ActiveX Web Browser (IE) sur un volet de notre application. Il s'agit d'un link on MSSXML and Delphi qui pourrait aider.

BTW: Si vous utilisez XSLT pour la première fois, vous pouvez modifier manuellement un fichier XML et ajouter une directive pour l'afficher à l'aide d'un fichier XSLT spécifique. Lorsque vous ouvrez le fichier XML dans Firefox après l'édition, le code XSLT sera appliqué et il vous montrera quelle sera la sortie de vos appels MSXML. est ici la ligne que vous ajoutez manuellement au xml:

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

Merci pour cela! Lorsque je modifie le document XML comme vous le suggérez, j'obtiens un changement d'apparence, mais il est clair qu'il n'utilise pas correctement les informations du document XSLT; Je me demande s'ils ne correspondent pas vraiment et ainsi la transformation ne fonctionne pas parce qu'elle ne trouve pas les entités auxquelles le XSLT fait référence. Je vais revenir au client et demander un peu plus d'aide. Merci de m'avoir initié, j'apprécie vraiment. – robsoft

+0

_ "et il vous montrera quelle sera la sortie de vos appels MSXML" _ >> non, lorsque vous appliquez votre feuille de style de cette façon et l'afficher via Firefox, ** le [TransformiiX] (https: //en.wikipedia .org/wiki/TransforMiiX) est utilisé, pas MSXML. ** – Abel

2

Si vous avez besoin que des transformations, vous pouvez utiliser TXMLDocument, enregistrer sur le disque et que d'afficher le résultat dans un TWebBrowser (via Navigate('file:///...')).

Personnellement, j'ai eu quelques problèmes avec MSXML alors j'ai commencé à utiliser DIXML.

+0

+1 pour le lien DIXML, cela semble vraiment utile. Je n'ai pas encore exploré correctement ce problème mais j'espère pouvoir faire quelque chose de simple avec juste quelques composants standard - donc merci pour la suggestion! – robsoft

1

Vous pouvez essayer d'installer AltovaXML, il peut être appelé comme COM +. Il est gratuit et peut être téléchargé à partir de: http://www.altova.com/altovaxml.html

MSXML ne peut fonctionne avec xslt 1.0 mais AltovaXML peut fonctionner avec xslt 2.0

+0

changé le nom de RaptorXML et non libre, de ce que je suis capable de voir (eitehr ils l'ont bien caché, ou il n'y a que les téléchargements d'essai disponibles) – ciuly

Questions connexes