XslCompiledTransform:属性值编码错误

时间:2011-07-27 13:45:10

标签: c# .net xml xslt xpath

我正在使用XslCompiledTranform转换XML / XSL。

这是我的测试XSL:

<span title="{./tooltip}" anattribute="{./tooltip}">
<xsl:value-of select="./tooltip"/>
</span>

您可以看到,为了进行测试,我将相同的XSL值(即@tooltip)放入title属性,将未定义的anattribute属性放入节点中。

在我的XML中,@tooltip编码为“this is a &lt;script&gt; tag”。更确切地说:值中没有HTML标记。一切都被编码,因此&lt;&gt;

如果我改变上面的结果,我会得到结果:

<span title="this is a <script> tag" anattribute="this is a <script> tag">
this is a &lt;script&gt; tag
</span>

为什么要保留节点值的编码,为什么要用编码值代替属性?最重要的是:我如何阻止XslCompiledTransform表现得那样?我希望我的属性完全我指定它们的方式,并且没有魔术转换。

我的设置如下:

var oXSL = new XslCompiledTransform( );
XsltSettings oXslSettings = new XsltSettings( );
XmlUrlResolver oUriResolver = new XmlUrlResolver( );
oXslSettings.EnableDocumentFunction = true;
oXslSettings.EnableScript = false;
oXSL.Load( sXslPath, oXslSettings, oUriResolver );

1 个答案:

答案 0 :(得分:0)

  

html输出方法不应该转义&lt;字符发生在   属性值。

有关详细信息,请参阅规范:http://www.w3.org/TR/xslt#section-HTML-Output-Method

使用<xsl:output method="xml"/>

输入XML:

<root>
    <tooltip>this is a &lt;script&gt; tag</tooltip>
</root>

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="root">
        <span title="{tooltip}" anattribute="{tooltip}">
            <xsl:value-of select="tooltip"/>
        </span>
    </xsl:template>
</xsl:stylesheet>

C#源代码:

var oXSL = new XslCompiledTransform();
XsltSettings oXslSettings = new XsltSettings();
XmlUrlResolver oUriResolver = new XmlUrlResolver();
oXslSettings.EnableDocumentFunction = true;
oXslSettings.EnableScript = false;
oXSL.Load(@"1.xslt", oXslSettings, oUriResolver);    
oXSL.Transform(@"input.xml", @"output.xml");

输出:

<?xml version="1.0" encoding="utf-8"?>
<span title="this is a &lt;script&gt; tag" anattribute="this is a &lt;script&gt; tag">this is a &lt;script&gt; tag</span>