這XML一個XML(RDF文件擴展名,但XML)是由自動工具產生的,但不幸的是有各種「轉義」串像需要一個應用程序來解決與轉義字符
<tag xml:lang="fr">L'insuline (du latin insula, île) </tag>
而且解析器(和推理軟件)崩潰與此...
的Java或PHP解決方案是有效的在我身上!
謝謝, 塞爾索
這XML一個XML(RDF文件擴展名,但XML)是由自動工具產生的,但不幸的是有各種「轉義」串像需要一個應用程序來解決與轉義字符
<tag xml:lang="fr">L'insuline (du latin insula, île) </tag>
而且解析器(和推理軟件)崩潰與此...
的Java或PHP解決方案是有效的在我身上!
謝謝, 塞爾索
下面是我用了很多,以確保一個字符串是XML正確轉義的一般方法。
private static final String AMP = "&";
private static final String LT = "<";
private static final String GT = ">";
private static final String QUOTE = """;
private static final String 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();
}
使用一個爲你做到這一點的庫會更好。通常現在我使用XMLStreamWriter API和Saxon序列化器。 – 2011-02-23 09:32:00
由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);
}
由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範圍之外的字符時纔會出現此問題。
建議的一句話:如果您已經提供瞭解析器生成的錯誤消息,則不會有太多不正確的答案。
這不是XML。它只是恰好相似。您的自動工具應該生成有效的XML。修理它。 – 2011-02-23 01:35:05
爲您希望回答的語言添加標籤。 – servermanfail 2011-02-23 02:06:12
其XML,因爲RDF是XML!谷歌第一,然後評論 – celsowm 2011-02-23 02:22:00