2012-03-31 2 views
0

Je rencontre des difficultés à référencer tous les 3. J'ai déjà écrit mon XML, XSD et XSL mais cela ne semble pas fonctionner avec le référencement. Voici un exemple simple utilisant le même référencement.XML XSL XSD Validation:

XSD:

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.w3schools.com" 
    xmlns="http://www.w3schools.com" 
    elementFormDefault="qualified"> 

    <xs:element name="email"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="to" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

XML:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="email.xsl"?> 

<email 
    xmlns="http://www.w3schools.com" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.w3schools.com email.xsd"> 

    <to>John</to> 
</email> 

XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:template match="/"> 
    <html> 
     <body> 
     <xsl:for-each select="email"> 
      <h2>To</h2> 
      <td><xsl:value-of select="John"/></td> 
     </xsl:for-each> 
     </body> 
    </html> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Alors, quelle est la question? Je n'en vois pas. Quel est le problème? Rien n'a été décrit comme problématique. –

Répondre

3

Le XSLT ne fonctionne pas parce que votre élément email a un espace de noms et de faire correspondre un élément avec un espace de noms utilisant un XPath vous devez toujours déclarer explicitement un préfixe et l'utiliser.

Vous devez écrire le XSL comme ceci:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ws="http://www.w3schools.com" 
    version="1.0"> 

    <xsl:template match="/"> 
    <html> 
     <body> 
     <xsl:for-each select="ws:email"> 
      <h2>To</h2> 
      <td><xsl:value-of select="ws:to"/></td> 
     </xsl:for-each> 
     </body> 
    </html> 

    </xsl:template> 

Je ne sais pas ce que vous attendez de la XSD: il semble correct, mais cela n'affectera en aucune façon la application du XSLT.

email est l'élément racine de votre fichier XML, donc vous ne pouvez avoir qu'un seul élément email par fichier XML - vous devriez probablement avoir un élément racine différent au-dessus.

Notez également que vous générez du code HTML douteux: un <td> qui ne se trouve pas dans une table.

+0

Ca marche maintenant merci !! – John