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