Maison > développement back-end > Tutoriel XML/RSS > 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

黄舟
Libérer: 2017-03-28 17:00:07
original
2115 Les gens l'ont consulté

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());
Copier après la connexion

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 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 ( dans cet exemple). À la fin du fichier, seule la balise

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();
}
Copier après la connexion
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 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>
Copier après la connexion

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();
}
Copier après la connexion

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 détermine le mode du modèle xsl. L'attribut match est obligatoire et pointe ici vers la balise XML . Dans notre système, la balise contient la balise , qui permet au modèle XML d'accéder aux informations sur le produit intégrées dans la balise Encore une fois, nous devons fermer la balise à 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

, qui n'est normalement pas fermée, doit être fermée avec

.

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>
Copier après la connexion

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 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 Si l'affectation est erronée, le contenu entre les balises d'ouverture et de fermeture de Terminez toute la section par .

在这个例子里,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>
Copier après la connexion

for-each

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

<xsl:for-each select="package">
<xsl:apply-templates select="product"/>
</xsl:for-each>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal