2016-05-25 3 views
0

Ich versuche zum ersten Mal xsl, und in 3 Stunden kann nicht eine einzige Zeile drucken!XSL kann Vorlagenvorlage nicht verwenden

btw. MOST einfache XML-Datei:

<?xml version="1.0" encoding="UTF-8"?> 

<book> 
    <author>qqqqqq</author> 
    <title>Srwrtwt</title> 
    <title>yoo</title> 
    <price>$10.00</price> 
</book> 

Und eine Version von xsl:

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

    <xsl:output method="html"/> 

    <xsl:template match="author"> 
     <html> 

     </html> 
    </xsl:template> 

    <xsl:template match="title"> 
      <h1> 
      <xsl:apply-templates/> 
      </h1> 
    </xsl:template> 

</xsl:stylesheet> 

Die Ausgabe lautet:

<html></html> 
    <h1>Srwrtwt</h1> 
    <h1>yoo</h1> 
    $10.00 

Und ich bin ok damit, aber wenn ich das ändern xsl wie folgt:

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

    <xsl:output method="html"/> 

    <xsl:template match="/"> 
     <html> 

     </html> 
    </xsl:template> 

    <xsl:template match="title"> 
      <h1> 
      <xsl:apply-templates/> 
      </h1> 
    </xsl:template> 

</xsl:stylesheet> 

Dies ist die Ausgabe, warum template match = „title“ NOW funktioniert nicht ?:

<html></html> 

Die Tatsache ist, dass ich ähnliches Beispiel getan haben, um zu versuchen zu verstehen, warum dies geschieht, und in anderen Fällen funktioniert es: Beispiel:

<?xml version="1.0"?> 
<page> 
    <title>Hello World</title> 
    <content> 
     <x>dewjnf</x> 
     <paragraph> 
      <resume>This is my first page!</resume> 
     </paragraph> 
    </content> 
</page> 

die xsl:

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

    <xsl:output method="html" /> 
    <xsl:template match="/"> 
     <html> 
      <head> 
       <title> 
        <xsl:value-of select="page/title" /> 
       </title> 
       <style> 
        h1{ 
        color: blue; 
        font-style: italic; 
        } 
       </style> 
      </head> 
      <body> 
       <xsl:apply-templates /> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="title"> 
     <div align="center"> 
      <h1> 
       <xsl:value-of select="." /> 
      </h1> 
     </div> 
    </xsl:template> 
    <xsl:template match="resume"> 
     <p> 
      <xsl:apply-templates /> 
     </p> 
    </xsl:template> 
</xsl:stylesheet> 

Und der Ausgang ist genau das, was ich mit dem Dokumentvorlageanpaßschlangen Arbeits erwartet: zu m e scheint genau das gleiche wie im vorherigen Beispiel, aber mit einem anderen Verhalten.

<html> 
<head> 
<META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Hello World</title> 
<style> 
h1 { 
    color: blue; 
    font-style: italic; 
} 
</style> 
</head> 
<body> 

    <div align="center"> 
     <h1>Hello World</h1> 
    </div> 

    dewjnf 

    <p>This is my first page!</p> 



</body> 
</html> 

Die Frage ist, warum manchmal, wenn Spiel gibt es = „/“ die anderen Matches und ja manchmal funktioniert? Wo ist der Fehler?

+1

Sie sollten lesen: https://www.w3.org/TR/xslt/#section-Processing-Model –

Antwort

0

Wenn Sie weitere Spiele haben, wie müssen Sie

<xsl:apply-templates /> 

in Ihrem templates hinzuzufügen. Wenn Sie dies nicht tun, werden die untergeordneten Knoten nicht berücksichtigt.

1

Warum funktioniert die Titelvorlage im zweiten Beispiel nicht? Weil es nicht erreicht wird. Sie sollten eine <xsl:apply-templates/> innerhalb der <xsl:template match="/"/><html>... tun - es wird nicht von selbst recurse

Verwandte Themen