Maison  >  Article  >  développement back-end  >  Explication détaillée du code pour générer des pages dynamiques à l'aide de XML et XSL

Explication détaillée du code pour générer des pages dynamiques à l'aide de XML et XSL

黄舟
黄舟original
2017-03-28 17:00:072092parcourir

xml (Extensible Markup Language) peut ressembler à une sorte de w3c standard - il n'a pas de réel impact pour le moment, et s'il s'avère utile plus tard, ce sera long il y a du temps. Mais en fait, il est déjà utilisé. Alors, n'attendez pas que XML ait été ajouté à votre htmléditeur préféré. Commencez à l'utiliser . Il résout désormais divers problèmes internes et problèmes du système b2b

Chez sparks.com, nous utilisons XML pour standardiser différents systèmes, desobjets Javaà l'affichage des données HTML

En particulier. , nous avons constaté qu'il est plus facile de partager et de manipuler des données tant qu'elles sont standardisées dans une structure XML très basique. Il existe de nombreuses façons efficaces d'utiliser XML. Voici une introduction détaillée de notre application actuelle

. 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

La génération de HTML à partir de la base de données n'est pas nouvelle, mais la génération de XML l'est. les étapes spécifiques de génération

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 ainsi. plusieurs modèles

statiques

pour générer du html

xml plus xsl est égal à html Cela peut sembler faux, mais notre page html que les utilisateurs voient est en fait le résultat de xml et. xsl. La puissance du XML vient de sa flexibilité. Mais malheureusement, il est parfois si flexible que vous vous retrouverez face à une page blanche et vous demanderez comment résoudre le problème dans n'importe quel projet XML. Pour ce faire, vous devez prendre les décisions suivantes :

Quelles données doivent être impliquées ?

Utiliser ou non dtd (définition du type de fichier)

Déterminer s'il faut utilisez DOM (Document Object Model) ou SAX (API simplifiée pour XML) pour analyser

Déterminez les données :

Comme il n'existe pas de format XML standard, les développeurs sont libres de développer leur propre format. Cependant, si votre format n'est reconnu que par une seule application, vous ne pouvez exécuter le programme que pour utiliser ce format. Il serait évidemment plus utile qu'il existe d'autres programmes qui comprennent également votre format XML. Le système qui l'utilise devra peut-être également être modifié, vous devez donc créer le 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 changer un format XML est d'ajouter des balises au lieu de les modifier

Cliquez ici pour voir un exemple du format de données XML

Chez sparks.com, nous examinons toutes les données de produits nécessaires aux différentes présentations de produits. Toutes les pages utilisent toutes les données, mais nous avons développé un. format de données XML très complet qui s'applique à 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.

S'il faut utiliser dtd

Chez sparks.com, nous utilisons du XML bien organisé au lieu du simple XML correct, car le premier ne nécessite pas de dtd. 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

event

, donc lorsque le XML est analysé, l'événement est envoyé 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 nécessite uniquement un système capable de gérer des chaînes. Nous avons construit un système utilisant java servlet, serveur javabean d'entreprise, jdbc et rdbms (base de données relationnelle système de gestion).

La 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 à la 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 de XSL, consultez Utilisation de kind.

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() suivantes sont elles-mêmes des appels à d'autres méthodes.

Générer l'en-tête du fichier
stringbuffer 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();
}
Remplissez les informations sur le produit

Après avoir terminé 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.
<?xml version="1.0"?> <?xml-stylesheet href="/browse_find/browse.xsl" type="text/xsl"?> <browse>

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. Notre modèle XML se compose de balises XSL et

html

soigneusement organisées.

Commencez à créer le modèleLe 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. Cet article provient de http://bianceng.cn (ProgrammationIntroduction)

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.

Dans le corps du modèle, de nombreuses balises XML sont utilisées pour fournir une logique de présentation des données. Deux balises couramment utilisées sont expliquées ci-dessous. La balise

choose
<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>

3e08d16b69ca6dceb52122b5e3e896ec est similaire au début de la 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.

    在这个例子里,when标签会为quantity标签检查xml。如果quantity标签里含有值为真的error属性,quantity标签将会显示列在下面的表格单元。如果属性的值不为真,xsl将会显示otherwise标签间的内容。在下面的实例里,如果error属性不真,则什么都不会被显示。

<xsl:choose>
<xsl:when test="quantity[@error=&#39;true&#39;]">
<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>

for-each

431e46b64b4819f2ac967516fbb4b43f标签可以用来对相似xml数据的多种情况应用同一个样式表。对于我们来说,可以从数据库中取出一系列产品信息,并在web页上进行统一格式化。这里有一个例子:

<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标签向样式表中插入数据

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn