2010-07-06 117 views
3

目前我正在嘗試一些非常簡單的事情。我正在通過一個XML文檔查找某個我試圖替換它的短語。我遇到的問題是,當我讀取行時,我將每行存儲到一個StringBuffer中。當我將它寫入文檔時,所有內容都寫在一行上。閱讀XML,替換文本並通過Java寫入相同的XML文件

這裏我的代碼:

File xmlFile = new File("abc.xml") 
BufferedReader br = new BufferedReader(new FileReade(xmlFile)); 
String line = null; 
while((line = br.readLine())!= null) 
{ 
    if(line.indexOf("abc") != -1) 
    { 
     line = line.replaceAll("abc","xyz"); 
    }   
    sb.append(line);     
} 
br.close(); 

BufferedWriter bw = new BufferedWriter(new FileWriter(xmlFile)); 
bw.write(sb.toString()); 
bw.close(); 

我假設我需要一個新的行字符時,我更喜歡sb.append但不幸的是我不知道的「\ n」來使用的字符不起作用。

提前致謝!

P.S.我認爲在我寫信給它之後,必須有一種方法來使用Xalan格式化XML文件。不知道如何做到這一點。

回答

7

readline讀取換行符之間的所有內容,因此當您寫回時,顯然缺少換行符。這些字符取決於操作系統:Windows使用兩個字符來執行換行,例如unix使用一個字符。爲了與操作系統無關,檢索系統屬性「line.separator」:

String newline = System.getProperty("line.separator"); 

並將它添加到您的StringBuffer:

sb.append(line).append(newline); 
+2

另一種可能性是使用'PrintWriter'及其'println'方法,這將在系統正確行終止自動地附加到任意字符串輸出。實際上,我會說這是將行寫入輸出文件的「標準」方式。 – 2010-07-06 16:10:31

+0

真棒工作! – Bilzac 2010-07-06 16:30:23

1

修訂者布雷爾的建議,您的文本替換方法應該工作,它對於簡單的應用程序來說足夠好用了。

如果事情開始變得有點多毛,並且最終希望根據它們在XML結構中的位置來選擇元素,並且如果您需要確保更改元素文本但不標記文本(請考慮<abc>abc</abc>),那麼你會想要在騎兵中調用並用X​​ML解析器處理XML。

本質上,您使用DocuemntBuilderDocument中閱讀過,您可以根據需要跳過文檔的節點,然後請Document將自己寫回文件。或者你問解析器?無論如何,大多數XML解析器都有一些選項可以讓你格式化XML輸出:你可以爲每個開始標籤指定縮進(也可以不指定),也許可以換行,這樣做可以讓你的XML看起來很漂亮。

+0

感謝您的回覆! – Bilzac 2010-07-06 17:37:24

0

Sb將是StringBuffer對象,該對象在此示例中尚未實例化。這可以在while循環之前加入:

StringBuffer sb = new StringBuffer(); 
+0

我們假設一個'StringBuffer'的實例已經被創建。這對回答這個問題沒有幫助。建議您再次閱讀該問題。 – rayryeng 2014-07-08 05:31:07

+0

@ rayryeng: - 添加了一個與一個答案相關的StringBuffer實例,該實例本身就是詢問變量「sb」 – IntelK 2014-07-08 10:31:09

+0

您可以將其作爲評論。但它仍然沒有建設性地回答這個問題。無論哪種方式,很好你清理的東西。 – rayryeng 2014-07-08 13:18:36