2012-04-10 14 views
0

Ich bin sehr neu in xsl und versuche ein Skript zu schreiben, um eine XML-Nachricht zu analysieren und eine Vorlage aufzurufen (die ich nicht kontrollieren kann, um die Eingabe zu formatieren). Einige der Felder in der XML-Nachricht können mehrmals angezeigt werden. In diesen Fällen möchte ich eine Nummer an das Ende von "StringValue" anhängen und sie an das with-param = "pet" der Call-Vorlage übergeben, die angibt, welches Vorkommen es ist.XSL Wie verkette ich Text mit xsl: number?

Der folgende Code scheint zu tun, was ich will; aber XML Spy sagt, dass es ungültiges XML ist. Gibt es eine bessere Möglichkeit, "StringValue" und "1", "StringValue" und "2" usw. für jede Vorlagenübereinstimmung von "Dog/Color" anzuhängen?

Zum Beispiel:

<xsl:template match="Dog/Color"> 
    <xsl:call-template name="FormatContents"> 
      <xsl:with-param name="pet">StringValue<xsl:number level="any"/></xsl:with-param> 
      <xsl:with-param name="color"> 
        <xsl:value-of select="."/> 
      </xsl:with-param> 
    </xsl:call-template> 
</xsl:template> 

Vielen Dank im Voraus!

+0

http://stackoverflow.com/questions/10090271/xsl-how-to-concatenate -text-with-xslnumber – thejartender

Antwort

2

Das Fragment Sie gab gültig ist, sind Sie sicher, dass der Fehler von diesem Bit kam? Es ist immer am besten, vollständige Beispiele zu veröffentlichen.

Input:

<Dog> 
<Color>Red</Color> 
<Color>Green</Color> 
</Dog> 

XSLT 1:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="Dog/Color"> 
<xsl:call-template name="FormatContents"> 
    <xsl:with-param name="pet">StringValue<xsl:number level="any"/></xsl:with-param> 
    <xsl:with-param name="color"> 
    <xsl:value-of select="."/> 
    </xsl:with-param> 
</xsl:call-template> 
</xsl:template> 

<xsl:template name="FormatContents"> 
<xsl:param name="pet"/> 
<xsl:param name="color"/> 
[<xsl:value-of select="$pet"/>][<xsl:value-of select="$color"/>] 
</xsl:template> 
</xsl:stylesheet> 

output:

[StringValue1][Red] 


[StringValue2][Green] 
+0

Danke für die Antwort David; Nach dem Zurückgehen und der doppelten Überprüfung stellte ich fest, dass mein Fehler von XMLSpy kam, weil er die Anrufvorlage nicht sah. – Mrc0113

0

Ich denke, dass Sie was Sie wollen, ist position() - d.h .:

<xsl:template match="Dog/Color"> 
    <xsl:call-template name="FormatContents"> 
    <xsl:with-param name="pet">StringValue<xsl:value-of select="position()"/></xsl:with-param> 
    <xsl:with-param name="color"> 
     <xsl:value-of select="."/> 
    </xsl:with-param> 
    </xsl:call-template> 
</xsl:template> 
+0

position() würde (im Allgemeinen) nicht die gleiche Nummer wie xsl: number level = "any" geben –