我收到每天都通过XSLT流程运行的XML;然而,偶尔的特殊角色会导致这种破裂。我正在寻找一些实用程序,它将清理XML &,并用正确的html数字编码替换特殊字符。只需要一个实用程序或一个想法。替换特殊字符xml文件
从评论
更新XML有时会包括 特殊字符,如¢而 不是
¢
所以我需要一种方法来改变 特殊字符的标签
我收到每天都通过XSLT流程运行的XML;然而,偶尔的特殊角色会导致这种破裂。我正在寻找一些实用程序,它将清理XML &,并用正确的html数字编码替换特殊字符。只需要一个实用程序或一个想法。替换特殊字符xml文件
从评论
更新XML有时会包括 特殊字符,如¢而 不是
¢
所以我需要一种方法来改变 特殊字符的标签
“特殊”字符(不是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
我不能重现此问题
这个样式表:
<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。
我有这个确切的问题刚刚;设置编码正确工作。 – Flynn1179 2011-03-03 09:38:44
你可以发布样本吗?如果它是有效的XML,它不应该破坏你的XSLT。你肯定这是有效的吗? – Oded 2011-03-02 20:36:58
XML有时会包含一个特殊字符,例如¢而不是¢,所以我需要一种将特殊字符更改为标记的方法。所以偶尔它无效。我只需要一些东西来遍历XML并将其与几个文本文件或其他东西进行比较。 – loren 2011-03-02 20:44:05
然后它是_not_有效的XML。您需要从您的源获取有效的XML。 – Oded 2011-03-02 20:47:10