2012-09-24 113 views
0

我寫了一個方法來檢查我的XML字符串&。XML轉義碼

我需要修改方法包括以下內容:

< & LT

> & GT

\ & guot

& &安培

\ &者

這裏是方法

private String xmlEscape(String s) { 
    try { 
     return s.replaceAll("&(?!amp;)", "&amp;"); 
    } 
    catch (PatternSyntaxException pse) { 
     return s; 
    } 
} // end xmlEscape() 

下面是我使用它

sb.append("   <Host>" + xmlEscape(url.getHost()) + "</Host>\n"); 

如何修改我的方法以納入其餘符號的方式嗎?

編輯

我想我一定不會有句話問題正確。 在xmlEscape()方法,我想檢查字符串以下字符 <>'"&,如果他們被發現我想要替換爲正確的字符的字符找到。

示例:如果存在字符&,字符將替換爲&amp;在字符串中。

你可以做

try { 
    s.replaceAll("&(?!amp;)", "&amp;"); 
    s.replaceAll("<", "&lt;"); 
    s.replaceAll(">", "&gt;"); 
    s.replaceAll("'", "&apos;"); 
    s.replaceAll("\"", "&quot;"); 
    return s; 
} 
catch (PatternSyntaxException pse) { 
    return s; 
} 
+0

嗯,沒有人阻礙你打電話'replaceAll'不僅僅是一次...也許我只是不理解這個問題?! – home

+1

這也可能有所幫助(谷歌第二次擊中):http://stackoverflow.com/questions/439298/best-way-to-encode-text-data-for-xml-in-java – home

+0

負面看法( '(!?amp;)')是一個錯誤。輸入可能是純文本。假設輸入是'「在XML中,爲了得到一個&符號,你需要寫'&'''。你的代碼將不正確地離開'&'。 –

回答

2

或者,您是否考慮過使用StAX (JSR-173) API來編寫XML文檔,而不是將字符串附加在一起(JDK/JRE中包含實現)?這將處理所有必要的字符轉義爲您提供:

package forum12569441; 

import java.io.*; 
import javax.xml.stream.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     // WRITE THE XML 
     XMLOutputFactory xof = XMLOutputFactory.newFactory(); 

     StringWriter sw = new StringWriter(); 
     XMLStreamWriter xsw = xof.createXMLStreamWriter(sw); 
     xsw.writeStartDocument(); 
     xsw.writeStartElement("foo"); 
     xsw.writeCharacters("<>\"&'"); 
     xsw.writeEndDocument(); 

     String xml = sw.toString(); 
     System.out.println(xml); 

     // READ THE XML 
     XMLInputFactory xif = XMLInputFactory.newFactory(); 
     XMLStreamReader xsr = xif.createXMLStreamReader(new StringReader(xml)); 
     xsr.nextTag(); // Advance to "foo" element 
     System.out.println(xsr.getElementText()); 
    } 

} 

輸出

<?xml version="1.0" ?><foo>&lt;&gt;"&amp;'</foo> 
<>"&' 
+1

+1 - 如果你想要XML,那麼使用一個知道所有規則的XML工具,否則很容易導致其他XML工具無法解析的結構不完整。 –

4

這樣簡單的事情你可能要考慮使用Apache公地StringEscapeUtils.escapeXml方法或其它許多XML逃生工具之一在那裏。這使您可以正確轉義XML內容,而不必擔心在需要轉義其他名稱而不是主機名時丟失某些內容。

+0

這應該是一種聲明的形式,否則它有可能被標記爲「不是答案」。 –