在我的XML中,当我将其变换为UTF-8时,会出现一些六进制十进制实体。
INPUT FILE:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a>a text.</a>
<b>b – text.</b>
</root>
我的XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output method="xml"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当前输出:
<root>
<a>a text.</a>
<b>b – text.</b>
</root>
期望的输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a>a text.</a>
<b>b – text.</b>
</root>
答案 0 :(得分:2)
了解为什么需要这样做会很有用,因为不同的技术可能会或可能不会满足您的要求。
一种方法是将US-ASCII指定为输出编码。然后,所有非ASCII字符将在输出中显示为数字实体(字符引用)。不幸的是,这也意味着您不能在元素或属性名称中使用非ASCII字符。
答案 1 :(得分:1)
将字符映射添加到脚本中
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output method="xml" use-character-maps="entity"/>
<xsl:character-map name="entity">
<xsl:output-character character="–" string="&#x2013;"/>
</xsl:character-map>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a>a text.</a>
<b>b – text.</b>
</root>