XslCompiledTransform:属性值编码不正确
本文关键字:编码 不正确 属性 XslCompiledTransform | 更新日期: 2023-09-27 18:03:47
我使用XslCompiledTranform
来转换XML/XSL。
<span title="{./tooltip}" anattribute="{./tooltip}">
<xsl:value-of select="./tooltip"/>
</span>
您可以看到,对于测试,我将相同的XSL值,即@tooltip
放入title
属性,一个未定义的anattribute
属性中,并且还将文本放入节点中。
在我的XML中,@tooltip
被编码为"this is a <script> tag
"。更准确地说:值中没有HTML标记。一切都是编码的,因此<
和>
如果我变换上面的,我得到的结果是:
<span title="this is a <script> tag" anattribute="this is a <script> tag">
this is a <script> 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
html输出方法不应该转义<中出现的字符属性值。>
更多信息请阅读规范:http://www.w3.org/TR/xslt#section-HTML-Output-Method
使用<xsl:output method="xml"/>
<root>
<tooltip>this is a <script> 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 <script> tag" anattribute="this is a <script> tag">this is a <script> tag</span>