我正在使用XslCompiledTranform
转换XML / XSL。
这是我的测试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 );
勒
答案 0 :(得分:0)
html输出方法不应该转义&lt;字符发生在 属性值。
有关详细信息,请参阅规范:http://www.w3.org/TR/xslt#section-HTML-Output-Method
使用<xsl:output method="xml"/>
输入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>