Introduction détaillée à un exemple de code qui utilise simultanément XML, schéma et XSLT

黄舟
Libérer: 2017-03-28 16:44:17
original
2069 Les gens l'ont consulté

Je n'ai jamais utilisé de schéma auparavant. Cette fois, j'espère ajouter un espace de noms et un schéma à mon fichier xml, puis utiliser xslt Converti en HTML, je ne m'attendais pas à ce que cela demande beaucoup d'efforts. Maintenant, j'enregistre les résultats d'un travail normal, dans l'espoir d'aider tout le monde.

Jetons d'abord un coup d'oeil à mon fichier xml. Il est destiné à être utilisé pour définir le menu de la page web

<?xml version="1.0" encoding="GB2312"?>
<menu_items>
<menu_item href="index.html" image="images/A1.gif" name="首页"/>
<menu_item href="ep.html" image="images/A2.gif" name="新闻">
    <menu_item href="ep.html" image="images/A2.gif" name="国内新闻"/>
</menu_item>
</menu_items>
Copier après la connexion

C'est un fichier xml très simple. détours, utilisez la fonction Generate Schema de xmlspy pour générer automatiquement le fichier de schéma, puis faites-le après avoir apporté quelques modifications mineures, le résultat est le suivant :

<?xml version="1.0" encoding="GB2312"?>
<xs:schema xmlns="http://www.hz-sp.com/2005/XMLSchema-menu" xmlns:xs=" 
 targetNamespace="http://www.hz-sp.com/2005/XMLSchema-menu">
<xs:element name="menu_item">
  <xs:complexType>
  <xs:sequence>
   <xs:element ref="menu_item" minOccurs="0"/>
  </xs:sequence>
  <xs:attribute name="name" type="xs:string" use="required"/>
  <xs:attribute name="href" type="xs:anyURI" use="optional"/>
  <xs:attribute name="image" type="xs:anyURI" use="optional"/>
  </xs:complexType>
</xs:element>
<xs:element name="menu_items">
  <xs:complexType>
  <xs:sequence>
   <xs:element ref="menu_item" maxOccurs="unbounded"/>
  </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>
Copier après la connexion

, puis utilisez la fonction Assign Schema. de xmlspy pour spécifier ce xsd en xml. Le nœud racine menu_items en xml est connecté comme :

<menu_items xmlns="http://www.hz-sp.com/2005/XMLSchema-menu" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.hz-sp.com/2005/XMLSchema-menu
menu.xsd">
Copier après la connexion

Ensuite, créez le fichier xslt, qui ne donne également que le résultat correct :

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xpath-default-namespace="http://www.hz-sp.com/2005/XMLSchema-menu" version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 xmlns:fn="http://www.w3.org/2004/07/xpath-functions" xmlns:xdt="http://www.w3.org/2004/07/xpath-datatypes" 
 xmlns="http://www.w3.org/1999/xhtml">>
<xsl:output encoding="GB2312" indent="yes" method="html" version="4.0"/>
<xsl:template match="mm:menu_items" xmlns:mm="http://www.hz-sp.com/2005/XMLSchema-menu">
  <table width="900" border="0" cellspacing="0" cellpadding="0">
  <tr>
   <xsl:for-each select="mm:menu_item">
   <a href="{@href}">
    <img src="{@image}" width="113" height="57" border="0"/>
   </a>
   </xsl:for-each>
  </tr>
  </table>
</xsl:template>
</xsl:stylesheet>
Copier après la connexion

Ce qui est ennuyeux, c'est que

xpath-default-namespace="http://www.hz-sp.com/2005/XMLSchema-menu"
Copier après la connexion

n'a aucun effet sur la correspondance de xsl:template. On estime que la correspondance n'est pas xpath Mais cet attribut n'a également aucun effet. sur le select for-each, ce qui est étrange, je suppose que je n'ai pas compris comment utiliser cet attribut.

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