2011-02-23 57 views
0

XML一個XML(RDF文件擴展名,但XML)是由自動工具產生的,但不幸的是有各種「轉義」串像需要一個應用程序來解決與轉義字符

<tag xml:lang="fr">L'insuline (du latin insula, île) </tag> 

而且解析器(和推理軟件)崩潰與此...

的JavaPHP解決方案是有效的在我身上!

謝謝, 塞爾索

+0

這不是XML。它只是恰好相似。您的自動工具應該生成有效的XML。修理它。 – 2011-02-23 01:35:05

+1

爲您希望回答的語言添加標籤。 – servermanfail 2011-02-23 02:06:12

+0

其XML,因爲RDF是XML!谷歌第一,然後評論 – celsowm 2011-02-23 02:22:00

回答

1

下面是我用了很多,以確保一個字符串是XML正確轉義的一般方法。

private static final String AMP = "&amp;"; 
private static final String LT = "&lt;"; 
private static final String GT = "&gt;"; 
private static final String QUOTE = "&quot;"; 
private static final String APOS = "&apos;"; 

public static String encodeEntities(String dirtyString) { 

    StringBuffer buff = new StringBuffer(); 
    char[] chars = dirtyString.toCharArray(); 

    for (int i = 0; i < chars.length; i++) { 
     if (chars[i] > 0x7f) { 
      buff.append("&#" + (int) chars[i] + ";"); 
      continue; 
     } 

     switch (chars[i]) { 
     case '&': 
      buff.append(AMP); 
      break; 
     case '<': 
      buff.append(LT); 
      break; 
     case '\'': 
      buff.append(APOS); 
      break; 
     case '"': 
      buff.append(QUOTE); 
      break; 
     case '>': 
      buff.append(GT); 
      break; 
     default: 
      buff.append(chars[i]); 
      break; 
     } 
    } 

    return buff.toString(); 
} 
+0

使用一個爲你做到這一點的庫會更好。通常現在我使用XMLStreamWriter API和Saxon序列化器。 – 2011-02-23 09:32:00

1

由OP給出的XML是良好的XML作爲單引號字符是有效的,所以是迴旋「I」,既不需要逸出。我會確保你使用的是諸如UTF-8之類的文本編碼。下面是快速的Java例子,做一個身份轉換:

public static void main(String[] args) throws Exception { 
    Transformer t = TransformerFactory.newInstance().newTransformer(); 
    StreamResult s = new StreamResult(System.out); 
    t.transform(new StreamSource(new StringReader("<tag xml:lang=\"fr\">L'insuline (du latin insula, île) </tag>")), s); 
} 
0

由OP給出的XML片段看起來是格式良好的。撇號和i-circumflex都不需要轉義。最可能的問題是XML使用iso-8859-1編碼,但缺少XML聲明,因此解析器認爲它採用UTF-8編碼。然後,解決方案是添加XML聲明<?xml version="1.0" encoding="iso-8859-1"?>,它告訴解析器如何解碼字符。 (對於僅包含ASCII字符的文檔,iso-8859-1和utf-8是無法區分的,因此只有在使用ASCII範圍之外的字符時纔會出現此問題。

建議的一句話:如果您已經提供瞭解析器生成的錯誤消息,則不會有太多不正確的答案。

相關問題