XslCompiledTransform:属性值编码不正确

本文关键字:编码 不正确 属性 XslCompiledTransform | 更新日期: 2023-09-27 18:03:47

我使用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 );

Rene

XslCompiledTransform:属性值编码不正确

html输出方法不应该转义<中出现的字符属性值。>

更多信息请阅读规范: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>