Textattribute als Wert für ein anderes Element
Frage
Mit dem XML unten, würde Ich mag wissen, wie den Wert des Textes im case_id Knoten als Attribut bekommen für den verdeckte Eingabe-Tag in dem xsl Blatt unten. Ist das möglich?
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="data.xsl"?>
<NewDataSet>
<Cases>
<Case>
<case_id>30</case_id>
...
...
</Case>
</Cases>
</NewDataset>
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<input type="hidden" name="case_num" value="?"/>
</xsl:template>
</xsl:stylesheet>
Lösung
Sie Ihre XSLT dies ändern, dies setzt voraus, dass Sie nur 1 case_id haben, andernfalls müssen Sie mit einer spezifischeren Dokumentvorlageanpaßschlangen gehen, und einen Teil des Weges in dem XPath-Wert entfernen ich als Beispiel verwendet.
<input type="hidden" name="case-num">
<xsl:attribute name="value">
<xsl:value-of select="/NewDataSet/Cases/Case/case_id" />
</xsl:attribute>
</input>
Andere Tipps
Versuchen Sie, diese
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<input type="hidden" name="case_num">
<xsl:attribute name="value">
<xsl:value-of select="/NewDataSet/Cases/Case/case_id/text()"/>
</xsl:attribute>
</input>
</xsl:template>
</xsl:stylesheet>
oder Sie können wie folgt Inline
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<input type="hidden" name="case_num" value="{/NewDataSet/Cases/Case/case_id/text()}"/>
</xsl:template>
Sie benötigen eine XSLT mit einigen spezifischeren Spielen zu erweitern.
In der folgenden ausgeben sollte input
Elemente, die Ihre case_id
Werte für jede Case
enthalten. Ich habe es angenommen ist ein case_id
pro Case
. Ich habe versucht, den XSLT so explizit wie möglich zu machen, aber Sie brauchen nicht genau dieses in Ihrer Implementierung zu sein, wenn Sie nicht sein wollen.
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Case">
<xsl:element name="input">
<xsl:attribute name="type">
<xsl:text>hidden</xsl:text>
</xsl:attribute>
<xsl:attribute name="name">
<xsl:text>case_num</xsl:text>
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="case_id"/>
</xsl:attribute>
</xsl:element>
</xsl:template>
einfach eine AVT verwenden (Attributwert-Template) wie folgt aus:
<input type="hidden" name="case_num" value="{*/*/*/case_id}"/>
Habe ich es zu:
<input type="hidden" name="case-num">
<xsl:attribute name="value">
<xsl:value-of select="case_id" />
</xsl:attribute>
</input>
, wie es in einer foreach-Schleife ist. Danke Jungs, die eine Behandlung funktioniert!