Maison > Article > développement back-end > Utilisez XML et XSL pour générer des pages dynamiques
XML (Extensible Markup Language) peut ressembler à une sorte de standard du W3C - il n'a pas de réel impact pour le moment, et même s'il s'avère utile plus tard, ce sera il y a longtemps. Mais en fait, il est déjà utilisé. N'attendez donc pas que XML soit ajouté à votre éditeur HTML préféré pour commencer à l'utiliser. Il peut désormais résoudre divers problèmes internes et problèmes du système b2b.
Chez sparks.com, nous utilisons XML pour standardiser la représentation des données entre différents systèmes, des objets Java aux affichages de données HTML.
En particulier, nous avons constaté qu'il est plus facile de partager et de manipuler des données lorsqu'elles sont standardisées dans une structure XML très basique. Au cours du processus, nous avons découvert de nombreuses façons efficaces d’utiliser XML. Ce qui suit décrit en détail notre application actuelle.
Standardisation
Avant d'utiliser XML, créez un format de données XML différent des informations que vous souhaitez utiliser.
Générer du XML dynamique
Générer du HTML à partir d'une base de données n'est pas nouveau, mais générer du XML l'est. Nous introduisons ici les étapes de génération spécifiques.
Utiliser XSL comme langage de modèle
XSL (Extensible Stylesheet Language) est un bon moyen de définir le format d'affichage des données XML. Il sera plus efficace s'il est écrit dans plusieurs modèles statiques.
Générer du HTML
xml plus xsl est égal à html. Cela peut ne pas sembler correct, mais notre page HTML que les utilisateurs voient est en fait le résultat de XML et XSL.
1. Standardisation
La puissance du XML vient de sa flexibilité. Mais malheureusement, il est parfois si flexible que vous vous retrouvez avec une page blanche à vous demander comment résoudre le problème.
Dans tout projet XML, la première étape consiste à créer un format de données standard. Pour ce faire, vous devez prendre les décisions suivantes :
• Quelles données impliquer
• Utiliser ou non dtd (définition du type de fichier)
• utiliser l'analyse dom (Document Object Model) ou SAX (API simplifiée pour XML)
Déterminer les données :
Comme il n'existe pas de format XML standard, les développeurs sont libres de développer leurs propres formats. Toutefois, si votre format n'est reconnu que par une seule application, vous ne pouvez exécuter que cette application pour utiliser le format. Il serait évidemment plus utile s'il existait d'autres programmes capables également de lire votre format XML. Si un format XML est modifié, le système qui l'utilise devra peut-être également être modifié. Vous devez donc créer un format aussi complet que possible. Étant donné que la plupart des systèmes ignorent les balises qu'ils ne reconnaissent pas, le moyen le plus sûr de modifier le format d'un fichier XML consiste à ajouter des balises et non à les modifier.
Cliquez ici pour voir un exemple de format de données XML
Chez sparks.com, nous avons examiné toutes les données produit nécessaires pour différents affichages de produits. Bien que toutes les pages n'utilisent pas toutes les données, nous avons développé un format de données XML très complet adapté à toutes les données. Par exemple, notre page de détails du produit affiche plus de données que notre page de navigation des produits. Cependant, nous utilisons toujours le même format de données dans les deux cas car le modèle XML de chaque page n'utilise que les champs dont il a besoin.
Utiliser ou non dtd
Chez sparks.com, nous utilisons du XML bien organisé plutôt que simplement du XML correct, car le premier ne nécessite pas de DDT. DTD ajoute une couche de traitement entre le clic de l'utilisateur et la visualisation de la page. Nous avons constaté que cette couche nécessitait trop de traitement. Bien sûr, il est toujours agréable d'utiliser des DTD pour communiquer avec d'autres entreprises au format XML. Parce que dtd peut garantir que la structure des données est correcte lors de l'envoi et de la réception.
Sélectionnez le moteur d'analyse
Maintenant, plusieurs moteurs d'analyse sont disponibles. Le choix que vous choisirez dépend presque entièrement des besoins de votre application. Si vous décidez d'utiliser DTD, le moteur d'analyse doit être capable de permettre à votre XML d'être vérifié par DTD. Vous pouvez placer la validation dans un processus distinct, mais cela aurait un impact sur les performances.
Sax et dom sont deux modèles analytiques de base. SAX est basé sur les événements, donc lorsque le XML est analysé, les événements sont envoyés au moteur. Ensuite, les événements sont synchronisés avec le fichier de sortie. Le moteur d'analyse DOM établit une structure arborescente hiérarchique pour les données XML dynamiques et les feuilles de style XSL. En accédant de manière aléatoire à l'arborescence DOM, les données XML peuvent être fournies comme si elles étaient déterminées par une feuille de style XSL. Le débat sur le modèle SAX porte principalement sur la réduction excessive de la mémoire de la structure DOM et l'accélération du temps d'analyse de la feuille de style XSL.
Cependant, nous avons constaté que de nombreux systèmes utilisant le sax n'exploitaient pas pleinement ses capacités. Ces systèmes l'utilisent pour créer des structures DOM et envoyer des événements via des structures DOM. Avec cette approche, le DOM doit être construit à partir de la feuille de style avant tout traitement XML, les performances en souffriront donc.
2. Générer du XML dynamique
Une fois le format XML établi, nous avons besoin d'une méthode pour le transplanter dynamiquement à partir de la base de données.
La génération de documents XML est relativement simple car elle ne nécessite qu'un système capable de gérer les chaînes. Nous avons construit un système utilisant le servlet Java, le serveur javabean enterPRise, jdbc et rdbms (système de gestion de base de données relationnelle).
• Le servlet gère les demandes d'informations sur les produits en déchargeant la tâche de génération de documents XML vers le javabean d'entreprise (ejb).
• ejb utilise jdbc pour interroger les détails du produit requis dans la base de données.
•ejb génère le fichier XML et le transmet au servlet.
• La servlet appelle le moteur d'analyse pour créer une sortie HTML à partir de fichiers XML et de feuilles de style XML statiques.
(Pour plus d'informations sur l'application des méthodes et des classes.
Le code pour démarrer le processus de génération XML est placé dans la méthode ejb. Cette instance créera immédiatement un stringbuffer pour stocker la chaîne XML générée. Les trois variables xml.append() qui suivent
sont elles-mêmes des appels à d'autres méthodes.
Générer l'en-tête du fichierstringbuffer xml = new stringbuffer(); xml.append(xmlutils.begindocument("/browse_find/browse.xsl", "browse", request)); xml.append(product.toxml()); xml.append(xmlutils.enddocument("browse"); out.print(xml.tostring());La première méthode supplémentaire appelle la classe xmlutils pour générer l'en-tête du fichier XML. Le code dans notre servlet java est le suivant :
Ce code génère l'en-tête du fichier XML. La balise 8a82eb472d64dd53782fcc091813a312 définit ce fichier comme un fichier XML prenant en charge la version 1.0. La deuxième ligne de code pointe vers l'emplacement de la feuille de style correcte pour afficher les données. La dernière chose incluse est la balise au niveau de l'élément (e257f6f680827d7bb9a03b87640198c8 dans cet exemple). À la fin du fichier, seule la balise 86d47457b1f44f493b73b959a822e430
public static string begindocument(string stylesheet, string page) { stringbuffer xml = new stringbuffer(); xml.append("<?xml version=\"1.0\"?>\n") .append("<?xml-stylesheet href=\"") .append(stylesheet).append("\"") .append(" type =\"text/xsl\"?>\n"); xml.append("<").append(page).append(">\n"); return xml.tostring(); }dc55d8f1b8d0d15e8e0c4fca7640a4b5 0a338bad3442b76cc533181ca2a63f24 >
Remplissez les informations sur le produit
Après avoir complété l'en-tête du fichier, la méthode de contrôle appellera l'objet java pour générer son XML. Dans cet exemple, l'objet produit est appelé. L'objet produit utilise deux méthodes pour générer sa représentation XML. La première méthode toxml() crée le nœud produit en générant les balises a719999c5224e00a42ab5e276e57a41b Il appelle ensuite internalxml(), qui fournit le contenu requis pour le fichier XML du produit. internalxml() est une série d'appels stringbuffer.append(). Le stringbuffer est également converti en chaîne et renvoyé à la méthode de contrôle.
Fermez le fichier
Enfin, la méthode xmlutils.enddocument() est appelée. Cet appel ferme la balise XML (dans ce cas) et complète enfin le fichier XML structuré. L'intégralité du tampon de chaîne de la méthode de contrôle est également convertie en chaîne et renvoyée au servlet qui a traité la requête http d'origine.
public string toxml() { stringbuffer xml = new stringbuffer("<product>\n"); xml.append(internalxml()); xml.append("</product>\n"); return xml.tostring(); } public string internalxml() { stringbuffer xml = new stringbuffer("\t") .append(producttype).append("\n"); xml.append("\t").append(idvalue.trim()) .append("\n"); xml.append("\t").append(idname.trim()) .append("\n"); xml.append("\t").append(page.trim()) .append("\n"); 厖? xml.append("\t").append(amount).append("\n"); xml.append("\t").append(vendor).append("\n"); xml.append("\t\n"); xml.append("\t").append(pubdesc).append("\n"); xml.append("\t").append(vendesc).append("\n"; 厖? return xml.tostring(); }3. Utilisez XSL comme langage de modèle
Afin d'obtenir une sortie HTML, nous combinons le fichier XML généré avec le modèle XML qui contrôle la façon dont les données XML sont représentées. Nos modèles XML sont constitués de balises XSL et HTML soigneusement organisées.
Commencez à créer le modèle
Le début de notre modèle XML est similaire au code ci-dessous. La première ligne de code est obligatoire et définit ce fichier comme une feuille de style XML. L'attribut xmlns:xsl= fait référence à l'espace de noms XML utilisé par ce fichier et l'attribut version= définit le numéro de version de l'espace de noms. A la fin du fichier, nous fermons la balise. La deuxième ligne de code commençant par 2032d1f3e843089f381a035edc734156 détermine le mode du modèle xsl. L'attribut match est obligatoire et pointe ici vers la balise XML 34ab9008638189d20e962c822c883981. Dans notre système, la balise 34ab9008638189d20e962c822c883981 contient la balise a719999c5224e00a42ab5e276e57a41b, qui permet au modèle XML d'accéder aux informations sur le produit intégrées dans la balise a719999c5224e00a42ab5e276e57a41b Encore une fois, nous devons fermer la balise 2032d1f3e843089f381a035edc734156 à la fin du fichier.
Ensuite, jetons un coup d’œil au HTML bien organisé. Puisqu'il sera traité par le moteur d'analyse XML, il doit respecter toutes les règles d'un XML bien organisé. Essentiellement, cela signifie que toutes les balises d'ouverture doivent avoir une balise de fermeture correspondante. Par exemple, la balise e388a4556c0f65e1904146cc1a846bee, qui n'est normalement pas fermée, doit être fermée avec 94b3e26ee717c64999d7867364b1b4a3.
choose
3e08d16b69ca6dceb52122b5e3e896ec est similaire au début d'une structure if-then-else dans les langages de programmation traditionnels. En XSL, la balise Choose indique que dans la partie où entre le code, l'affectation déclenchera l'action. La balise 1aab2a36c3da35537dba594d8b9f335a avec les attributs attribués suit la balise Choose. Si l'affectation est correcte, le contenu entre les balises d'ouverture et de fermeture de 1aab2a36c3da35537dba594d8b9f335a Si l'affectation est erronée, le contenu entre les balises d'ouverture et de fermeture de b490e3a477a758f8d417150b585fd42a Terminez toute la section par 0deb431ca822a5ae1672ac1bd025a592.<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match="basketpage"> <html> <head> <title>shopping bag / adjust quantity</title> </head> <body bgcolor="#cccc99" bgproperties="fixed" link="#990000" vlink="#990000"> <br> ?br> </xsl:template> </xsl:stylesheet>
Dans cet exemple, la balise when vérifiera le XML pour la balise de quantité. Si l'étiquette de quantité contient un attribut d'erreur avec une valeur true, l'étiquette de quantité affichera les cellules du tableau répertoriées ci-dessous. Si la valeur de l'attribut n'est pas vraie, xsl affichera le contenu entre les balises sinon. Dans l'exemple suivant, si l'attribut d'erreur n'est pas vrai, rien ne sera affiché. La balise
431e46b64b4819f2ac967516fbb4b43f peut être utilisée pour appliquer la même feuille de style à plusieurs situations de données XML similaires. Pour nous, une série d'informations sur les produits peuvent être extraites de la base de données et formatées de manière uniforme sur la page Web. Voici un exemple :
<xsl:choose> <xsl:when test="quantity[@error='true']"> <td bgcolor="#ffffff"><img height="1" width="1" src="http://img.sparks.com/images/i-catalog/sparks_images/sparks_ui/clearpixel.gif"/></td> <td valign="top" bgcolor="#ffffff" colspan="2"> <font face="verdana, arial" size="1" color="#cc3300"><b>*not enough in stock. your quantity was adjusted accordingly.</b> </font></td> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose>
<xsl:for-each select="package"> <xsl:apply-templates select="product"/> </xsl:for-each>
for-each 循环在程序遇到标签时开始。这个循环将在程序遇到标签时结束。一旦这个循环运行,每次标签出现时都会应用这个模板。
四、生成html
将来的某一时刻,浏览器将会集成xml解析引擎。到那时,你可以直接向浏览器发送xml和xsl文件,而浏览器则根据样式表中列出的规则显示xml数据。不过,在此之前开发者们将不得不在他们服务器端的系统里创建解析功能。
在sparks.com,我们已经在java servlet里集成了一个xml解析器。这个解析器使用一种称为xslt (xsl transformation)的机制,按xsl标签的说明向xsl模板中添加xml数据。
当我们的java servlet处理http请求时,servlet检索动态生成的xml,然后xml被传给解析引擎。根据xml文件中的指令,解析引擎查找适当的xsl样式表。解析器通过dom结构创建html文件,然后这个文件再传送给发出http请求的用户。
如果你选择使用sax模型,解析器会通读xml源程序,为每个xml标签创建一个事件。事件与xml数据对应,并最终按xsl标签向样式表中插入数据。
以上就是用XML和XSL来生成动态页面的内容,更多相关内容请关注PHP中文网(www.php.cn)!