我有以下XSLT代码:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exslt="http://exslt.org/common"
xmlns:msxml="urn:schemas-microsoft-com:xslt" xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon"
xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath"
xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings"
xmlns:DesignetExtender ="urn:DesignetExtender"
xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"
exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath
Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets DesignetExtender ">
...
<xsl:variable name="test">
<xsl:value-of select="exslt:node-set($HtmlPermulations)" disable-output-escaping="yes"/>
</xsl:variable>
HtmlPermulations的价值如下:
<root><item>Stationcar
</item><item>Cabriolet
</item><item>SUV</item><item>Stationcar
Cabriolet</item><item>Stationcar
SUV</item><item>Cabriolet
SUV</item><item>Stationcar
Cabriolet
SUV</item></root>
但是当我试图在这个for-each循环中使用它时:
<xsl:for-each select="$test/root/item">
<xsl:value-of select="."/>
</xsl:for-each>
我收到此错误消息:
要在路径表达式中使用结果树片段,请先进行转换 使用msxsl:node-set()函数到节点集。
有人可以帮忙吗?
答案 0 :(得分:1)
您似乎有一个带有标记的字符串,您希望将其解析为节点树。 msxsl:node-set
函数不会这样做,它会获取结果树片段并将其转换为节点集。 disable-output-escaping
没有帮助,因为它仅用于最终序列化步骤,但不用于变量内部。因此,使用纯XSLT 1.0,您所能做的就是编写两个样式表,第一个可以使用disable-output-escaping来输出变量的内容,第二个可以输出的过程。或者您需要检查您的XSLT处理器是否支持扩展功能,或者允许您实现一个将标记字符串解析为节点树的处理器。