Maison >développement back-end >Tutoriel XML/RSS >Introduction détaillée à un exemple de code qui utilise simultanément XML, schéma et XSLT

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

黄舟
黄舟original
2017-03-28 16:44:172074parcourir

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>

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>

, 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">

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>

Ce qui est ennuyeux, c'est que

xpath-default-namespace="http://www.hz-sp.com/2005/XMLSchema-menu"

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!

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