目前我正在尝试一些非常简单的事情。我正在浏览一个XML文档,查找我试图替换它的某个短语。我遇到的问题是,当我读取行时,我将每行存储到StringBuffer中。当我将它写入文档时,所有内容都写在一行上。
这是我的代码:
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文件。不知道如何做到这一点。
答案 0 :(得分:7)
readline读取换行符之间的所有内容,因此当您回写时,显然缺少换行符。这些字符取决于操作系统:Windows使用两个字符来换行,例如unix使用一个换行符。要与操作系统无关,请检索系统属性“line.separator”:
String newline = System.getProperty("line.separator");
并将其附加到您的stringbuffer:
sb.append(line).append(newline);
答案 1 :(得分:1)
根据Brel的建议进行修改,您的文本替换方法应该可行,并且它对于简单的应用程序来说效果很好。
如果事情开始变得有点毛茸茸,你最终想要根据它们在XML结构中的位置选择元素,并且你需要确保更改元素文本而不是标记文本(想想{{1} }),然后你会想要在骑兵中调用并使用XML解析器处理XML。
基本上,您使用<abc>abc</abc>
在Document
中阅读,您可以随意浏览文档的节点,然后让DocuemntBuilder
将自己写回文件。或者你问解析器?无论如何,大多数XML解析器都有一些选项可以让你格式化XML输出:你可以为每个开始标记指定缩进(或不标注)和换行符,这样可以使你的XML看起来很漂亮。
答案 2 :(得分:0)
Sb
将是StringBuffer
对象,在此示例中尚未实例化。这可以在while
循环之前添加:
StringBuffer sb = new StringBuffer();
答案 3 :(得分:-1)
Scanner scan = new Scanner(System.in);
String filePath = scan.next();
String oldString = "old_string";
String newString = "new_string";
String oldContent = "";
BufferedReader br = null;
FileWriter writer = null;
File xmlFile = new File(filePath);
try {
br = new BufferedReader(new FileReader(xmlFile));
String line = br.readLine();
while (line != null) {
oldContent = oldContent + line + System.lineSeparator();
line = br.readLine();
}
String newContent = oldContent.replaceAll(oldString, newString);
writer = new FileWriter(xmlFile);
writer.write(newContent);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
scan.close();
br.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}