我收到每天都通過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