我有一个具有非标准字符的xml文件,我想将其转换为Windows 1252编码,因此&#nnn我不太了解XSLT,但是我已经尝试过任何帮助,请这里是XML和XSLT
<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="Windows-1252"/>
<xsl:template match="/Recordset">
<Recordset><xsl:apply-templates /></Recordset>
</xsl:template>
<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
</xsl:transform>
字符的XML示例
<?xml version="1.0"?>
<Recordset>
128 € euro sign
129 NOT USED
130 ‚ single low-9 quotation mark
131 ƒ Latin small letter f with hook
132 „ double low-9 quotation mark
133 … horizontal ellipsis
134 † dagger
135 ‡ double dagger
136 ˆ modifier letter circumflex accent
137 ‰ per mille sign
138 Š Latin capital letter S with caron
139 ‹ single left-pointing angle quotation mark
140 Œ Latin capital ligature OE
141 NOT USED
142 Ž Latin capital letter Z with caron
143 NOT USED
144 NOT USED
145 ‘ left single quotation mark
146 ’ right single quotation mark
147 “ left double quotation mark
148 ” right double quotation mark
149 • bullet
150 – en dash
151 — em dash
152 ˜ small tilde
153 ™ trade mark sign
154 š Latin small letter s with caron
155 › single right-pointing angle quotation mark
156 œ Latin small ligature oe
157 NOT USED
158 ž Latin small letter z with caron
159 Ÿ Latin capital letter Y with diaeresis
160 no-break space
</Recordset>
答案 0 :(得分:0)
您要询问的字符可以在您要询问的文档字符编码中表示。因此,您不需要使用数字字符实体引用。
XSLT似乎太过改变文档字符编码。您需要读取原始XML文件,然后使用不同的文档字符编码再次将其写出。这将导致无法在您选择的字符编码中表示的Unicode代码点被序列化为数字字符实体引用。无需涉及XSLT,对于XSLT,您将必须完成所有这些工作。因此,您可以跳过XSLT步骤。
尽管如此,如果您确实有一个工具可以读取XML文件,应用转换并再次将其写入,并遵守xsl:output编码属性,则可以将 Identity Transform 与适当的输出元素:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="XML" encoding="Windows-1252" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如果在示例文档中执行此操作,则会看到“ 128€欧元符号”确实在Windows-1252中进行了编码。
31 32 38 20 80 20 65 75 72 6F 20 73 69 67
如果要将€表示为数字字符实体引用,请使用文档字符编码对不支持该字符集的字符集进行编码,例如IBM437。
目前还不清楚为什么要使用UTF-8以外的文档字符编码。如果XML处理器不支持XML的字符集(即Unicode),它就不会走得太远。