2016-04-20 14 views
1
zurück

Ich weiß, dass die Frage bereits mehrfach beantwortet wurde, aber aus irgendeinem Grund funktioniert nicht für mich. Also, was ich erreichen will ist, den Inhalt eines Elements zur Ausgabe durch die Verwendung es Attributwert ist, darauf zuzugreifen, sondern einen bestimmten Wert für das Attribut deklarieren wie:

<xsl:value-of select="title[@attribute='value']"/> 

Das für meine Code funktioniert, aber ich will verwenden, um eine Variable wie: was

<xsl:value-of select="title[@attribute='$variable']"/> 

aber egal, ich oder die verschiedenen Möglichkeiten, wie ich versuche, es wie:

<xsl:value-of select="//title[@attribute='$variable']"/> 
oder 0

<xsl:value-of select="//title[@attribute= $variable]"/> 

hat ouptut nichts und ich bekomme keine Fehler von Saxon so dass ich keine Ahnung habe, was los ist.


XML-Datei

<root> 
    <documentname> 
     <element>text</element> 
     . 
     . 
     <element1 atributename1="VALUE1">text</element1> 
     . 
     . 
     <element95 atributename1="value1" secondatribute="0001"/> 
     . 
     . 
    </documentname> 
    </root> 

xsl Datei

<xsl:template match="element95 "> 
     <xsl:choose> 
     <xsl:when test="@atributename1">  
     <xsl:variable name="keyb" select="substring(@secondatribute,1,4)"/> 
     <xsl:variable name="keyval" select="substring(@atributename1, 0,6)" /> 
     <xsl:variable name="keyc"> 
     <xsl:value-of select="'upper-case($keyval)'"/></xsl:variable> 
     <a href="#{$keyc}"><xsl:value-of select="($keyb)"/>.0(<xsl:value-of select="//element1 [@atributename1=($keyc)]"/>)</a> 
    </xsl:when> 
</xsl:choose> 

Ausgang:

1.0() 

gewünschte ouput:

1.0(text) 
+0

Keine von diesen kompilieren für mich, ']' fehlt. – biziclop

+1

Können Sie bitte ein minimales XSL-Stylesheet und ein Testdokument einbeziehen, das dieses Problem verursacht? – biziclop

+1

@Eugenios Ihr letzter Ausschnitt sieht gut aus, also ist es unmöglich zu sagen, was falsch war, ohne das minimale, aber vollständige Beispiel zu sehen, das das Problem demonstriert – har07

Antwort

0

Ihre Fragen sind bis auf Stringliterale

<xsl:value-of select="//title[@attribute='$variable']"/> 

sagt: „Ich möchte Wert des Attributs die tatsächliche String‚$ variabel sein '" so wollen Sie verwenden:

<xsl:value-of select="//title[@attribute= $variable]"/> 

immer Sie auch diesen Fehler gemacht haben, wenn die variable Einstellung:

 <xsl:variable name="keyc"> 
    <xsl:value-of select="'upper-case($keyval)'"/></xsl:variable> 

Verwendung:

 <xsl:variable name="keyc"> 
    <xsl:value-of select="upper-case($keyval)"/></xsl:variable> 

oder lesbare

<xsl:variable name="keyc" select="upper-case($keyval)"/> 

Und lesen-up auf String-Handling und Expansion in xslt allgemein.

0

Hier sind einige Probleme mit Ihrem XSL-Codes:

  • $keyc Variable Zeichenkette 'upper-case($keyval)' gesetzt wurde.Entfernen Sie die einfachen Anführungszeichen, damit sie als XPath-Ausdruck erkannt und ordnungsgemäß ausgewertet werden.

  • substring(@atributename1, 0,6) in Ihrer Demo gibt 'value' zurück. Es ist nicht klar, was Sie hier erreichen wollen, aber dies führt definitiv dazu, dass //element1[@atributename1=($keyc)] keine Übereinstimmung findet, da es im XML-Beispiel keine atributename1 mit dem Wert 'value' gibt. Sie möchten entweder den Parameter substring() auf eine höhere Länge setzen oder substring() gleicher Länge verwenden, wenn Sie @atributename1 mit $keyc vergleichen.

+1

danke es war der 'Großbuchstabe ($ keyval)' – Eugenios

Verwandte Themen