2011-03-02 132 views
0

我收到每天都通过XSLT流程运行的XML;然而,偶尔的特殊角色会导致这种破裂。我正在寻找一些实用程序,它将清理XML &,并用正确的html数字编码替换特殊字符。只需要一个实用程序或一个想法。替换特殊字符xml文件

从评论

更新XML有时会包括 特殊字符,如¢而 不是¢所以我需要一种方法来改变 特殊字符的标签

+0

你可以发布样本吗?如果它是有效的XML,它不应该破坏你的XSLT。你肯定这是有效的吗? – Oded 2011-03-02 20:36:58

+0

XML有时会包含一个特殊字符,例如¢而不是¢,所以我需要一种将特殊字符更改为标记的方法。所以偶尔它无效。我只需要一些东西来遍历XML并将其与几个文本文件或其他东西进行比较。 – loren 2011-03-02 20:44:05

+0

然后它是_not_有效的XML。您需要从您的源获取有效的XML。 – Oded 2011-03-02 20:47:10

回答

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

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

+0

我有这个确切的问题刚刚;设置编码正确工作。 – Flynn1179 2011-03-03 09:38:44