在比较特殊的html字符时,XSLT 2.0 replace函数返回相同的字符串

时间:2011-08-07 08:12:49

标签: html xslt xslt-2.0

我正在编写一个XSLT来为HTML Help Viewer 1.0生成HTML。某些标题包含&lt;&gt;序列。当观察者将它们转换回尖括号时,这会导致观察者出现大量问题。已经在网上阅读,因为有Unicode版本可以使用(http://mshcmigrate.helpmvp.com/faq/notes10)我尝试使用replace函数来执行此操作,结果与输入相同。< / p>

我使用的代码是:

replace(replace(/*/name, '&lt;', '&#60;'), '&gt;', '&#62;')

输入:

DocumentationTest.GenericClass&lt;T&gt; Namespace

输出为:

DocumentationTest.GenericClass&lt;T&gt; Namespace

如何执行字符串替换以获得此输出?

DocumentationTest.GenericClass&#60;T&#62; Namespace

2 个答案:

答案 0 :(得分:1)

&lt;&#60;是同一角色的两种不同表示形式。您可以使用replace()(或更简单地说,translate())将一个字符更改为另一个字符,但您不能使用它来控制该字符在序列化输出中的表示方式 - 这完全取决于序列化程序。但是,您可以使用字符映射来影响它 - 请参阅xsl:character-map

答案 1 :(得分:0)

这是正确的行为,因为XML解析器本身在XSLT得到它之前执行。如果您必须在文档中保留&lt;,则应将其编码为&amp;lt;,并在所有&符号上进行简单查找和替换,并将其替换为&amp;,应该做的。