2017-03-10 1 views
1

Berücksichtigen Sie, dass <xsl:value-of select="@select"/> Ausgänge /root/name. Der ausgewertete Ausdruck, den ich an value-of übergeben möchte, wählt also einen bestimmten Wert in XML aus.Wie könnte ich xsl: value-of dynamic machen?

Ganze Code, den ich Arbeit machen wollen:

XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<root> 
    <xsl:value-of select="/root/name"/> 
    <name>Foo</name> 
</root> 

XSL:

<xsl:template match="xsl:value-of">                                           
    <xsl:element name="{name()}">                                           
     <xsl:attribute name="select"> 
      <xsl:value-of select="@select"/> 
     </xsl:attribute>                                     
    </xsl:element>                                               
</xsl:template> 

gewünschte Ausgabe: Foo

Aber es gibt nichts aus oder mit einer anderen Lösung gibt es nur /root/name aus.

Ist es sogar möglich, dass dieser Code funktioniert? Ich benutze XSLT 1.0. Kein

Dank

+0

Bitte senden Sie ein reproduzierbares Beispiel, einschließlich XML-Eingabe und dem erwarteten Ausgang - siehe: [MCVE]. –

+0

@ michael.hor257k Bearbeitet :) – Facedown

Antwort

1

Zuerst ist Ihre Eingabe nicht XML: Sie können kein Präfix haben, ohne es an einen Namespace zu binden.

Noch wichtiger ist, wird der Wert des select Attribut ist die Zeichenfolge"/root/name". Sie können eine Zeichenfolge nicht als XPath-Ausdruck in XSLT 1.0 oder 2.0 auswerten (es sei denn, Ihr Prozessor unterstützt eine Art der Erweiterungsfunktion evaluate() *).

Ich bin mir nicht sicher, was genau Sie hier erreichen wollen, aber ich vermute, dass Sie Ihre Strategie überdenken müssen. Vielleicht müssen Sie zunächst ein XSLT-Stylesheet aus dem Eingabedokument erstellen und dieses Stylesheet dann im zweiten Durchlauf auf die Eingabe anwenden.


(*) Zum Beispiel entweder mit den libxslt oder dem Xalan-J Prozessor Sie den folgenden wohlgeformten Eingang verarbeiten können:

XML

<root xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:value-of select="/root/name"/> 
    <name>Foo</name> 
</root> 

mit folgenden Stylesheet:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:dyn="http://exslt.org/dynamic" 
extension-element-prefixes="dyn"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/root"> 
    <results> 
     <xsl:apply-templates select="xsl:value-of"/> 
    </results> 
</xsl:template> 

<xsl:template match="xsl:value-of"> 
    <result> 
     <xsl:value-of select="dyn:evaluate(@select)"/> 
    </result> 
</xsl:template> 

</xsl:stylesheet> 

zu erhalten:

Ergebnis

<?xml version="1.0" encoding="UTF-8"?> 
<results> 
    <result>Foo</result> 
</results> 
Verwandte Themen