在下面的XSL转换中,如何输出'<'和'>'符号?
输入XML:
<TestResult bugnumber="3214" testname="display.methods::close->test_ManyInvoke" errortype="Failure"><ErrorMessage><![CDATA[calling close() method failed - expected:<2>]]></ErrorMessage>
Run Code Online (Sandbox Code Playgroud)
XSLT:
<xsl:template match="TestResult">
<xsl:variable name="errorMessage">
<xsl:value-of select="ErrorMessage" disable-output-escaping="yes"/>
</xsl:variable>
<Test name='{@testname}'>
<TestResult>
<Passed>false</Passed>
<State>failure</State>
<Metadata>
<Entry name='bugnumber' value='{@bugnumber}' />
</Metadata>
<TestOutput>
<Metadata>
<Entry name='ErrorMessage' value='{$errorMessage}' />
</Metadata>
</TestOutput>
</TestResult>
</Test>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
输出XML:
<Test name="display.methods::close->test_ManyInvoke">
<TestResult>
<Passed>false</Passed>
<State>failure</State>
<Metadata>
<Entry name="bugnumber" value="3214"/>
</Metadata>
<TestOutput>
<Metadata>
<Entry name="ErrorMessage" value="calling close() method failed - expected:<2>"/>
</Metadata>
</TestOutput>
</TestResult>
</Test>
Run Code Online (Sandbox Code Playgroud)
Dim*_*hev 10
简答:你做不到.
答案很长:属性的值不能包含一些特殊字符,例如'<','>'和'&'.
如果存在,它们将被转义为:'<','>'和'&'.
如果输出方法是"text",则可以生成这些字符,这不是您的情况.
在浏览器中显示时看起来像这些字符的文本也可以生成:use:'<','>'and '&'.
最后,您可以使用CDATA部分将这些字符生成为文本节点的一部分.以下示例说明了这一点:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output cdata-section-elements="t"
omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<t> < & ></t>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
当此转换应用于任何XML文档(未使用)时,结果为:
<t><![CDATA[ < & >]]></t>
Run Code Online (Sandbox Code Playgroud)
这是一个非常古老的问题,其他评论者可能正确地质疑为什么你需要这个,但如果你只是想知道如何在输出中添加 < 或 > ,那么你可以这样做。
<xsl:value-of disable-output-escaping="yes" select="string('<')"/>
Run Code Online (Sandbox Code Playgroud)
更多信息请访问MSDN 站点。