阅读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);
修订者布雷尔的建议,您的文本替换方法应该工作,它对于简单的应用程序来说足够好用了。
如果事情开始变得有点多毛,并且最终希望根据它们在XML结构中的位置来选择元素,并且如果您需要确保更改元素文本但不标记文本(请考虑<abc>abc</abc>
),那么你会想要在骑兵中调用并用XML解析器处理XML。
本质上,您使用DocuemntBuilder
在Document
中阅读过,您可以根据需要跳过文档的节点,然后请Document
将自己写回文件。或者你问解析器?无论如何,大多数XML解析器都有一些选项可以让你格式化XML输出:你可以为每个开始标签指定缩进(也可以不指定),也许可以换行,这样做可以让你的XML看起来很漂亮。
感谢您的回复! – Bilzac 2010-07-06 17:37:24
Sb
将是StringBuffer
对象,该对象在此示例中尚未实例化。这可以在while
循环之前加入:
StringBuffer sb = new StringBuffer();
另一种可能性是使用'PrintWriter'及其'println'方法,这将在系统正确行终止自动地附加到任意字符串输出。实际上,我会说这是将行写入输出文件的“标准”方式。 – 2010-07-06 16:10:31
真棒工作! – Bilzac 2010-07-06 16:30:23