2011-03-02 137 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