2014-09-10 73 views
0

有編碼XML特殊字符的Java API:<,>,&」,「用於編碼特殊XML字符的Java API?

我的代碼讀取一個文件,並創建一個XML出來的我們正在閱讀的文件,有沒有辦法逃避這些字符沒有硬編碼在他們與string.replace?

的URLEncode編碼的一切,包括空格,所以我不能使用。

感謝

+0

您的代碼正在從DOM寫入XML嗎? – Leo 2014-09-10 20:51:47

+0

[XMLStreamWriter](http://docs.oracle.com/javase/7/docs/api/javax/xml/stream/XMLStreamWriter.html):*但是,writeCharacters方法需要轉義&,< and >對於屬性值writeAttribute方法會將上面的字符加上「以確保所有的字符內容和屬性值格式正確。* – clcto 2014-09-10 20:54:49

回答

0

如果您創建一個從DOM您的XML,那麼特殊字符將會被轉義出來。

例如

import java.io.StringWriter; 
import java.io.Writer; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.OutputKeys; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import org.w3c.dom.Comment; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 

public class NewXML { 
public static void main(String[] args) throws Exception { 

     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = dbf.newDocumentBuilder(); 
     Document doc = builder.newDocument(); 

     // create the root element node 
     Element element = doc.createElement("root"); 
     doc.appendChild(element); 

     // create a comment node given the specified string 
     Comment comment = doc.createComment("This is a comment"); 
     doc.insertBefore(comment, element); 

     // add element after the first child of the root element 
     Element itemElement = doc.createElement("item"); 
     element.appendChild(itemElement); 

     // add an attribute to the node 
     itemElement.setAttribute("myattr", "attr>value"); 

     // create text for the node 
     itemElement.insertBefore(doc.createTextNode("te<xt"), itemElement.getLastChild()); 

     prettyPrint(doc); 

    } 

    public static final void prettyPrint(Document xml) throws Exception { 
     Transformer tf = TransformerFactory.newInstance().newTransformer(); 
     tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
     tf.setOutputProperty(OutputKeys.INDENT, "yes"); 
     Writer out = new StringWriter(); 
     tf.transform(new DOMSource(xml), new StreamResult(out)); 
     System.out.println(out.toString()); 
    } 
} 

生成

<?xml version="1.0" encoding="UTF-8"?><!--This is a comment--><root> 
<item myattr="attr&gt;value">te&lt;xt</item> 
</root> 

PS。從此網站提取的示例 - http://examples.javacodegeeks.com/core-java/xml/dom/create-dom-document-from-scratch/