Ich habe noch nie ein Schema verwendet. Dieses Mal hoffe ich, Namespace und Schema zu meiner xml-Datei hinzuzufügen und dann xslt Nach der Konvertierung in HTML hatte ich nicht damit gerechnet, dass es viel Aufwand erfordert. Jetzt zeichne ich die Ergebnisse der normalen Arbeit auf und hoffe, allen etwas zu helfen.
Werfen wir zunächst einen Blick auf meine XML-Datei. Sie dient dazu, das Menü der Webseite zu definieren.
<?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>
Es handelt sich um eine sehr einfache XML-Datei Verwenden Sie auf Umwegen die Funktion „Schema generieren“ von xmlspy, um die Schemadatei automatisch zu generieren, und führen Sie sie dann nach einigen geringfügigen Änderungen wie folgt aus:
<?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>
und verwenden Sie dann die Funktion „Schema zuweisen“. xmlspy, um dieses xsd in xml anzugeben. Der Stammknoten „menu_items“ in xml ist wie folgt verbunden:
<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">
Als nächstes erstellen Sie die xslt-Datei, die ebenfalls nur das richtige Ergebnis liefert:
<?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>
Was ärgerlich ist, ist, dass
xpath-default-namespace="http://www.hz-sp.com/2005/XMLSchema-menu"
keine Auswirkung auf die Übereinstimmung von xsl:template hat. Es wird geschätzt, dass die Übereinstimmung nicht xpath ist. Aber dieses -Attribut hat auch keine Auswirkung auf das select in for-each, was seltsam ist, ich glaube, ich habe nicht verstanden, wie man dieses Attribut verwendet.
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in Beispielcode, der XML, Schema und XSLT gleichzeitig verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!