gpt4 book ai didi

java - 有效地查找和替换包含 html 的大型 kml 文件?

转载 作者:行者123 更新时间:2023-12-01 13:56:58 25 4
gpt4 key购买 nike

编辑:这些文件已发布到我正在处理的网络服务器上,我现在手头没有它们,只有一个“代表性示例”。

我有很大的 kml 文件(80000 行),可能更大,其中包含 xml 和 html,我需要在 xml 的特定元素上查找替换。

<href>some_random_file_name<href>

我需要用一个值替换那里存在的值我尝试过使用类似的东西:

http://www.mkyong.com/java/how-to-modify-xml-file-in-java-dom-parser/

但是发现html导致解析器出错,找不到我想要的元素。

现在我正在逐行迭代文件并寻找我想要的元素,但这速度非常慢。我需要一种相对有效的方法来处理这个问题。

迭代代码:

            File kml = new File(kmlFile);
FileReader reader = new FileReader(kml);
BufferedReader br = new BufferedReader(reader);
String txt="";
String line = null;
while((line = br.readLine())!= null) {
if(line.contains("href")) {
String tmp = line.replace("<href>","");
tmp = tmp.replace("</href>","");
tmp = tmp.replaceAll("\t", "");
tmp = tmp.replaceAll("images/", "");
line = "<href>"+namesToIds.get(tmp)+"</href>";
}
txt+=line;
}

br.close();
FileWriter writer = new FileWriter(kml);
BufferedWriter bw = new BufferedWriter(writer);
bw.write(txt);
bw.flush();
bw.close();

我认为我现在无法放置 KML。如果这很重要,我可以尝试从其中取出一些东西来清理它以供互联网使用。我认为里面可能有一些专有的东西。

最佳答案

txt+=line;

连接运算符创建一个包含左侧和右侧连接的新字符串。这涉及复制两个操作数中的所有字符。例如,在该循环的第 1000 次迭代中,它将复制 txt 的当前内容和 line 的内容。这是该文件的前 1001 行。换句话说,如果文件中有 n 行,您将复制一行文本 n * (n + 1)/2 次。当然,一遍又一遍地复制相同的行并不是最有效的方法。

相反,您应该将转换后的文本累积在 StringBuilder 中,或者更好的是,不要累积在内存中,而是在转换后将每一行添加到输出文件中。

类似于:

try (BufferedReader reader = new BufferedReader(new FileReader(kmlFile))) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {
String line = null;
while((line = br.readLine())!= null) {
writer.write(convert(line));
writer.write("\n");
}
}
}

关于java - 有效地查找和替换包含 html 的大型 kml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19575403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com