替换特殊字符xml文件

时间:2011-03-02 20:34:20

标签: xml xslt

我收到的是每天运行XSLT进程的XML;然而,偶尔的特殊性格导致这种情况破裂。我正在寻找一些可以清理XML和XML的工具。用正确的html数字编码替换特殊字符。只需要一个实用工具或想法。

从评论中更新

  

XML有时会包含一个   special等特殊字符   比¢所以我需要一种方法来改变   标签的特殊字符

3 个答案:

答案 0 :(得分:1)

如果您的XSLT代码无法处理此输入XML,则输入实际上不是XML,或者您将其错误地呈现给XSLT处理器。最可能的解释是文件的编码不是文件开头的XML声明所说的;或者可能没有XML声明,因此处理器假定为UTF-8,但它实际上是iso-8859-1。解决方案可能就像在文件的开头添加XML声明一样简单,以将编码声明为iso-8859-1。

答案 1 :(得分:0)

“特殊”字符(非ASCII字符的Unicode字符)是有效的XML,因此您应该真正修复解析器。如果这不起作用,请通过以下过滤器管道代码:

#!/usr/bin/env python

import sys

input = sys.stdin.read().decode('UTF-8')
for c in input:
    sys.stdout.write('&#%04d;' % ord(c) if c >= 128 else c)

UTF-8替换为文档的编码。将上述代码保存到xmlentities,然后调用

python xmlentities <broken.xml >fixed.xml

答案 2 :(得分:0)

我无法重现此问题

此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

使用此输入:

<t>¢</t>

输出:

<?xml version="1.0" encoding="UTF-16"?>
<t>¢</t>