У меня есть следующий тестовый код ... Я пытаюсь передать набор узлов в качестве параметра. Через несколько часов я наконец смог передать его в свой шаблон.Невозможно отличить из XRTreeFrag в XNodeSet
Как передать мой набор узлов для шаблона:
<xsl:call-template name="listing">
<xsl:with-param name="customData">
<xsl:apply-templates select="exslt:node-set($data)"/>
</xsl:with-param>
</xsl:call-template>
Как мой шаблон получает его:
<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>
Если установить параметры с одним вкладышем, то это было бы не жаловаться ... пример:
<xsl:variable name="data" select="$customData"/>
Но как только я пытаюсь установить его, как это, он ломает:
<xsl:variable name="data">
<xsl:value-of select="$customData"/>
</xsl:variable>
Получение сообщение об ошибке: org.apache.xpath.objects.XRTreeFrag не может быть приведен к org.apache.xpath.objects.XNodeSet
я только смог найти другой поток датированный еще в 2000 году, расскажут об этой подобной проблеме ... Мне нужно повторно установить его обратно, используя что-то вроде набора узлов ($ customData)/*, но я пробовал это, и это было не так.
EDIT: ОК, я могу подтвердить, что успешно прошел набор узлов внутри моего шаблона. Но я все еще не могу скопировать его в свою переменную ... Он продолжал говорить, что это все еще 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>
выше тест показывает, что я могу получить доступ к $ CustomData и оригинальному/данные без каких-либо проблем, они оба показывают запись ... но $ данных перепутались. Так это означает, что копия от $ CustomData до $ данных не работает ...
Я попытался следующие пути, ни один из них не работает:
<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"/>
Любая идея ...?
'строка ($ CustomData)' или в качестве альтернативы ' 'должен работать без проблем. –
не работает ... обновил мой оригинальный пост с материалом, который я пробовал, что может быть проблемой ...? Все еще бросать org.apache.xpath.objects.XRTreeFrag нельзя отнести к org.apache.xpath.objects.XNodeSet Но я думал, что это уже набор узлов ... почему он все еще видит RTF внутри шаблона? – codenamezero