Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换特殊字符xml文件_Xml_Xslt - Fatal编程技术网

替换特殊字符xml文件

替换特殊字符xml文件,xml,xslt,Xml,Xslt,我每天都会收到一个通过XSLT流程运行的XML;然而,偶尔的特殊角色会导致这种情况的发生。我正在寻找一些工具,将清理XML和替换为正确的html数字编码特殊字符。只是需要一个实用工具或想法 根据评论更新 XML有时会包含 特殊字符,如 比和#xA2所以我需要一种改变的方法 标记的特殊字符 “特殊”字符(非ASCII的Unicode字符)是有效的XML,因此您应该真正修复解析器。如果这不起作用,请通过以下过滤器传递代码: #!/usr/bin/env python import sys inp

我每天都会收到一个通过XSLT流程运行的XML;然而,偶尔的特殊角色会导致这种情况的发生。我正在寻找一些工具,将清理XML和替换为正确的html数字编码特殊字符。只是需要一个实用工具或想法

根据评论更新


XML有时会包含 特殊字符,如 比
和#xA2所以我需要一种改变的方法
标记的特殊字符

“特殊”字符(非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
python xmlentities fixed.xml

我无法重现此问题

此样式表:

<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>

¢

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

您能发布一个示例吗?如果它是有效的XML,就不应该破坏XSLT。您确定它是有效的吗?XML有时会包含一个特殊字符,例如×,而不是¢;所以我需要一种方法将特殊字符更改为标记。所以有时候它是无效的。我只需要一些东西来遍历XML,并将其与几个文本文件或其他东西进行比较,然后它就不是有效的XML了。您需要从源代码中获取有效的XML。确切地说,它是3p软件生成XML的,所以这就是为什么我需要某种类型的清理实用程序解决了这个问题。使用XSLT中一种称为字符映射的功能比使用实用程序或创建额外脚本更有效。我最近遇到了这个问题;正确设置编码是有效的。