通过xml文件搜索文本的最佳方法

时间:2015-01-12 23:00:58

标签: java xml search full-text-search

我在一个根文件夹下的不同子目录中有数千个xml文件。 我的要求是在所有这些xml文件中搜索文本,而不管它们在xml文件中的位置。

目前我正在使用BufferedReader类来读取这些xml文件(我的代码如下所示)

     while ((currentLine = br.readLine()) != null) {
        if (currentLine.contains("myTargetString")) {
              temp = currentLine;
            myArraylist.add(temp );
        }

但我知道应该有一些搜索这些xml文件的最佳方法,但无法找出最佳的API或方法。

我得到一个字符串作为输入,我的程序应该能够搜索所有的xml文件并返回文件名。通过使用这个BufferedReader,它需要很长时间。

任何想法都会有所帮助。

2 个答案:

答案 0 :(得分:1)

所以你可以在这里做两个可能的解决方案。首先,对于每个文件,您可以使用XML paser进行解析(Java有许多API)然后使用类似xpath查询的内容(类似于// * [text()='您的查询&#39) ]  找到符合文本条件的元素。

其次,您可以查看JamesB建议的内容并选择像Lucene这样的索引解决方案,对于某些目录中的每个文件,对这些文件编制索引,然后使用lucenes搜索API对其进行搜索以查找文本字符串

答案 1 :(得分:0)

如果您需要提高速度并且无法使用索引(lucene将是我的建议),您可以先使用旧的递归grep命令grep -r <searchtext> <path>来过滤输入。 (Link to grep on windows question)。然后使用Java解析生成的文件,以过滤掉误报命中(注释掉的块,匹配元素名称,......)。 Grep是IMHO在没有索引的情况下在大量文件中查找文本的最快方法。