我正在使用在ASP上运行的CMS,该CMS具有用于数据输入的文本字段。它以<fieldname>escaped field val</fieldname>
的形式将该数据传递给XSLT 1.0渲染模板。所有字符都转义为它们的HTML等价物,因此如果我在CMS中输入xml字符串
<test><foo><bar>bar val</bar></foo><something>something val</something></test>
渲染模板的值为
<test><foo><bar>bar val</bar></foo><something>something val</something></test>
是否可以将转义的xml字符串转换为实际的xml我可以将模板应用到?
这是一个模板,其中包含了我迄今为止尝试过的一些内容。我能够在模板中运行C#,所以我尝试了各种组合的disable-output-escaping和我自己的手动C#方法,但无论如何,当我将它传递给node-set时,它不会成为我能做的事情。将模板应用于。
<msxsl:script language="C#" implements-prefix="user">
public string makeTags(string input)
{
return System.Net.WebUtility.HtmlDecode(input);
}
</msxsl:script>
<xsl:template match="/data">
<h1>working</h1>
<xsl:variable name="outputHTMLText">
<xsl:value-of select="user:makeTags(output)" disable-output-escaping="yes" />
</xsl:variable>
<xsl:variable name="outputNodes" select="exslt:node-set($outputHTMLText)" />
<xsl:copy-of select="$outputNodes" />
</xsl:template>
<xsl:template match="test">
<xsl:value-of select="*" />
</xsl:template>
答案 0 :(得分:0)
在.NET和XslCompiledTransform
中,您可以使用
<msxsl:script language="C#" implements-prefix="user">
public XPathNavigator parse(string input)
{
using (StringReader sr = new StringReader(input))
{
return new XPathDocument(sr).CreateNavigator();
}
}
</msxsl:script>
将XML字符串解析为XPathNavigator,然后在XSLT中表示为(单个节点的)节点集,以将模板应用于例如。
<xsl:apply-templates select="user:parse(Output)/test"/>
这假设当您尝试输出您拥有的值时,您显示的转义只是xml或html输出方法的效果。