要在路径表达式中使用结果树片段,首先使用msxsl:node-set()函数将其转换为节点集

时间:2014-03-16 19:41:32

标签: html xslt escaping umbraco node-set

我有以下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的价值如下:

&lt;root&gt;&lt;item&gt;Stationcar
                                        &lt;/item&gt;&lt;item&gt;Cabriolet
                                        &lt;/item&gt;&lt;item&gt;SUV&lt;/item&gt;&lt;item&gt;Stationcar
                                         Cabriolet&lt;/item&gt;&lt;item&gt;Stationcar
                                         SUV&lt;/item&gt;&lt;item&gt;Cabriolet
                                         SUV&lt;/item&gt;&lt;item&gt;Stationcar
                                         Cabriolet
                                         SUV&lt;/item&gt;&lt;/root&gt;

但是当我试图在这个for-each循环中使用它时:

<xsl:for-each select="$test/root/item">
 <xsl:value-of select="."/>
</xsl:for-each>

我收到此错误消息:

  

要在路径表达式中使用结果树片段,请先进行转换   使用msxsl:node-set()函数到节点集。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您似乎有一个带有标记的字符串,您希望将其解析为节点树。 msxsl:node-set函数不会这样做,它会获取结果树片段并将其转换为节点集。 disable-output-escaping没有帮助,因为它仅用于最终序列化步骤,但不用于变量内部。因此,使用纯XSLT 1.0,您所能做的就是编写两个样式表,第一个可以使用disable-output-escaping来输出变量的内容,第二个可以输出的过程。或者您需要检查您的XSLT处理器是否支持扩展功能,或者允许您实现一个将标记字符串解析为节点树的处理器。