阅读XML,替换文本并通过Java写入相同的XML文件

阅读XML,替换文本并通过Java写入相同的XML文件

问题描述:

目前我正在尝试一些非常简单的事情。我正在通过一个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文件。不知道如何做到这一点。

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

修订者布雷尔的建议,您的文本替换方法应该工作,它对于简单的应用程序来说足够好用了。

如果事情开始变得有点多毛,并且最终希望根据它们在XML结构中的位置来选择元素,并且如果您需要确保更改元素文本但不标记文本(请考虑<abc>abc</abc>),那么你会想要在骑兵中调用并用X​​ML解析器处理XML。

本质上,您使用DocuemntBuilderDocument中阅读过,您可以根据需要跳过文档的节点,然后请Document将自己写回文件。或者你问解析器?无论如何,大多数XML解析器都有一些选项可以让你格式化XML输出:你可以为每个开始标签指定缩进(也可以不指定),也许可以换行,这样做可以让你的XML看起来很漂亮。

+0

感谢您的回复! – Bilzac 2010-07-06 17:37:24

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