查找并替换有效包含html的大型kml文件?

时间:2013-10-24 19:57:51

标签: java html xml

编辑:这些文件发布到我正在处理的网络服务器上,我现在手头没有,只有“代表性样本”。

我有大的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放好。如果它至关重要,我可以尝试从中抽出一堆东西来为互联网消毒。我认为其中可能有一些专有的东西。

1 个答案:

答案 0 :(得分:1)

  

TXT + =行;

concat运算符创建一个包含左侧和右侧串联的新字符串。这涉及复制两个操作数中的所有字符。例如,在该循环的第1000次迭代中,它将复制txt的当前内容和行的内容。这是该文件的前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");
        }
    }
}