十六进制实体以UTF字符更改

时间:2017-12-08 07:19:18

标签: xml xslt-2.0

在我的XML中,当我将其变换为UTF-8时,会出现一些六进制十进制实体。

INPUT FILE:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <a>a text.</a>
    <b>b &#x2013; 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 &#x2013; text.</b>
</root>

2 个答案:

答案 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="&#x2013;" string="&amp;#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 &#x2013; text.</b>
    </root>

请参阅流程http://xsltransform.hikmatu.com/6qM2e2b