在XML XSLT中保持实体完整

我使用XSL样式表(使用Apache Xalan)将XML转换为HTML.在XML中,可以有& mdash;之类的实体,必须保留原样.在XML文件的开头,我有一个引用这些实体的doctype.我该怎么做才能使实体保持不变?

<!DOCTYPE article [
<!ENTITY mdash "&mdash;"><!-- em dash -->
]>

给我SAXParseException:递归实体扩展,在XML文本中遇到&mdash时为’mdash’.

最佳答案
定义和使用实体的方法是:

<!DOCTYPE xsl:stylesheet [<!ENTITY mdash "&#x2014;">]>
<t>Hello &mdash; World!</t>

使用最简单的XSLT样式表进行处理时:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
</xsl:stylesheet>

产生正确的输出(包含mdash):

你好,世界!

重要:

在XSLT 2.0中,可以使用< xsl:character-map>指令,以便某些特定的字符由实体表示.在这种情况下:

<xsl:stylesheet   version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:output omit-xml-declaration="yes" 
    use-character-maps="mdash"/>
  <xsl:character-map name="mdash">
    <xsl:output-character character="&#x2014;" string="&amp;mdash;" />
  </xsl:character-map>

</xsl:stylesheet>

当上述转换应用于相同的XML文档时(如上所示),输出为:

Hello &mdash; World!

转载注明原文:在XML XSLT中保持实体完整 - 代码日志