2011-09-19 37 views
3

我想創建一個空白替換爲 的XML。但是Java的變壓器轉義&符號,從而使輸出 如何在Java-XML中禁用/避免&符號轉義?

這裏是我的示例代碼:

public class Test { 

    public static void main(String[] args) { 

     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document document = builder.newDocument(); 

     Element element = document.createElement("element"); 
     element.setTextContent(" "); 
     document.appendChild(element); 

     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
     StreamResult streamResult = new StreamResult(stream); 
     transformer.transform(new DOMSource(document), streamResult); 
     System.out.println(stream.toString()); 

    } 

} 

這是我的示例代碼的輸出:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<element>&amp;#160;</element> 

任何想要解決或避免這種情況?非常感謝!

+0

我想知道爲什麼你想要替換空白。你想解釋一下嗎? – Wivani

+0

據我所知,他想要一個不破壞的空白(究竟是0xA0)而不是一個普通的空白 –

+0

我創建的xml是一個xsl-fo-xml,其中我需要塊元素的空白。所以空白對我來說是必要的,因爲apache-fop似乎忽略了領先空白。我得到了其他地方的建議,用這個實體取代空白。安德烈是對的。 – oleh

回答

5

文本內容直接設置爲你想要的字符,並在必要的序列化器將逃脫它爲您:

element.setTextContent("\u00A0"); 
+0

謝謝,這對我有效。非常簡單的解決方案:-) – oleh

+0

這種方式沒有轉義,因爲0xA0不是xml的特殊字符。所以它可能不是什麼想要的。 –

+0

好吧,我接受了答案,因爲它爲我工作。雖然你是對的,但這不是我真正想要的答案。 – oleh

0

嘗試使用

element.appendChild (document.createCDATASection ("&#160;")); 

,而不是

element.setTextContent(...); 

你會得到這個在你的XML: 它可能工作,如果我正確理解你的東西正在努力去做。

+0

我試過你的建議,它不適合我。生成的字符數據「<![CDATA []]使我在後面的代碼中遇到了一些麻煩,我會在稍後處理這個問題。 – oleh

+0

經過一番嘗試,這種方式的結果與簡單的文本節點相同。文本' '被當作分隔字符而不是一個實體來處理。所以進一步的處理會導致'$ amp;#160;'。 – oleh

0

至於附加到42的回答是:

如果像我一樣,你想在非修補 Eclipse IDE中的代碼,你可能會看到一些奇怪的A的出現的,而不是不間斷的空間。這是因爲Eclipse中控制檯的編碼不符合Unicode(UTF-8)。

-Dfile.encoding=UTF-8添加到您的eclipse.ini應解決此問題。

乾杯, 維姆

0

的解決方案是非常可笑:

Node disableEscaping = document.createProcessingInstruction(StreamResult.PI_DISABLE_OUTPUT_ESCAPING, "&"); 
Element element = document.createElement("element"); 
element.setTextContent("&#160;"); 
document.appendChild(disableEscaping); 
document.appendChild(element); 
Node enableEscaping = document.createProcessingInstruction(StreamResult.PI_ENABLE_OUTPUT_ESCAPING, "&"); 
document.appendChild(enableEscaping) 

所以基本上你需要把逃逸元素之間的代碼。

相關問題