Unable to cast von XRTreeFrag in XNodeSet
Habe ich die folgenden test-code... ich versuche mich zu übergeben, node-set als param. Nach vielen Stunden, ich war schließlich in der Lage, übergeben Sie es an meiner Vorlage.
Wie gebe ich meine node-set zu der Vorlage:
<xsl:call-template name="listing">
<xsl:with-param name="customData">
<xsl:apply-templates select="exslt:node-set($data)"/>
</xsl:with-param>
</xsl:call-template>
Wie meine Vorlage erhält es:
<xsl:template name="listing">
<xsl:param name="customData" select="/.."/>
<xsl:variable name="data">
<xsl:choose>
<xsl:when test="not($customData)">
<xsl:value-of select="/data"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$customData"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<textarea><xsl:copy-of select="$data"></xsl:copy-of></textarea>
</xsl:call-template>
Wenn ich die Parameter einstellen, die mit einem one-liner, dann würde es mich nicht beschweren... Beispiel:
<xsl:variable name="data" select="$customData"/>
Aber sobald ich versuche, es so einstellen, es bricht:
<xsl:variable name="data">
<xsl:value-of select="$customData"/>
</xsl:variable>
Immer diese Fehlermeldung:
org.apache.xpath.Objekte.XRTreeFrag kann nicht umgewandelt werden, org.apache.xpath.Objekte.XNodeSet
Ich war nur in der Lage gewesen zu finden einem anderen thread datiert im Jahr 2000, sprechen über das ähnliche Problem... ich muss re-nodeset zurück mit so etwas wie node-set($customData)/* aber ich versuchte das, und es war ein no go.
EDIT:
OK, ich kann bestätigen, dass ich erfolgreich die Knoten-set in meinem template. Aber ich bin immer noch nicht in der Lage, Sie zu kopieren auf meine variable... Er sagte immer wieder, dass es noch eine RTF.
<xsl:template name="listing">
<xsl:param name="customData" as="node-set"/>
<!--<xsl:variable name="data" select="/data"/>-->
<xsl:variable name="data">
<xsl:choose>
<xsl:when test="count($customData) != 0">
<xsl:copy-of select="$customData"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="/data"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<textarea><xsl:value-of select="$customData/record[1]"/></textarea>
<textarea><xsl:value-of select="/data/record[1]"/></textarea>
<textarea><xsl:value-of select="$data/record[1]"/></textarea>
</xsl:template>
Den oben genannten test, der zeigt, dass ich zugreifen kann $customData und die original - /Daten ohne irgendein problem, Sie zeigen beide die Platte... aber $Daten wird Durcheinander gebracht. Das bedeutet also, dass die Kopie von $customData zu $data nicht funktioniert...
Ich habe versucht, die folgenden Möglichkeiten, keine davon funktioniert:
<xsl:copy-of select="$customData"/>
<xsl:value-of select="$customData"/>
<xsl:apply-templates select="exslt:node-set($customData)"/>
<xsl:apply-templates select="exslt:node-set($customData)/data"/>
Irgendeine Idee...?
string($customData)
oder alternativ<xsl:copy-of select="$customData"/>
sollte funktionieren ohne problem.- funktioniert nicht... aktualisiert mein original post mit den Sachen, die ich versucht, was das problem sein könnte...? Noch werfen org.apache.xpath.Objekte.XRTreeFrag kann nicht umgewandelt werden, org.apache.xpath.Objekte.XNodeSet Aber ich dachte, es ist bereits ein Knoten-set... warum ist es immer noch zu sehen, als RTF in der Vorlage?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Fehlermeldung kommt von Xalan, der eines XSLT 1.0-Prozessor. Wenn Sie mit Xalan, dann sind Sie wahrscheinlich mit Java, was bedeutet, es gibt wirklich überhaupt keinen Grund, sich nicht zu bewegen, um XSLT 2.0 in form von Saxon. Sie werden feststellen, dass Sie von XSLT 2.0-entfernt viele der Einschränkungen von XSLT 1.0 -, von denen dies ist einer der am meisten reizen.
Wenn es einen guten Grund, warum Sie können nicht vorwärts bewegen zu XSLT 2.0 (und es ist schwer, von einem denken), es gibt einen workaround in form der exslt:node-set () - Funktion wandelt eine Ergebnis-Struktur-fragment (das heißt, eine variable definiert mit Kind-Befehle) in einem Dokument-Knoten.
Habe es funktioniert, im Grunde eher als unter Verwendung der apply-Vorlage, die ich brauchen, um passieren die RTF als parameter an die Vorlage. Das ist die einzige Art, wie ich es geschafft habe.
Mit dieser Methode konnte ich ÄNDERN Daten im XSL-Ebene. Das ist wirklich cool, habe ich im Prinzip manipulieren die Daten, die ich will, dann kann ich rekonstruieren, die Wurzel /, und dann gebe ich meine customData zu meinem template-Funktion.
Also eher als das Lesen von Daten aus dem root, ich lese meine eigenen Daten geändert haben (im inneren konstruiert XSL).
$customData
), dann durch die Zeit, die Sie füttern wollen Sie die Daten wieder in einer anderen Funktion als parameter übergeben Sie es mitexslt:node-set($customData)
.<xsl:variable name="data">.... and here comes the choose....</xsl:variable>
Verwendung von exslt:node-set hat in der Tat die Fehlermeldung unterdrücken org.apache.xpath.Objekte.XRTreeFrag kann nicht umgewandelt werden, org.apache.xpath.Objekte.XNodeSet
Jedoch der Knoten, die erstellt wird, aus irgendeinem Grund kann nicht verwendet werden, die in nachfolgenden XPath-Ausdrücke; zumindest ist es nicht zu funktionieren scheinen, mit Xalan 2.6.0 /XSLT 1.0, das ist die version, die viele Menschen gezwungen sind, zu verwenden für einen oder anderen Grund.
Gibt es eine einfache Lösung: anstatt die variable zu einem Knoten-set, legen Sie es auf den XPath-Ausdruck statt. Dann kann man die dyn:bewerten Sie EXSLT-Funktion, um den XPath-Ausdruck auszuwerten gehalten, die durch die variable.
Dein code würde wie folgt Aussehen:
..