如何在Java中搜索XML文件,然后输出XML文件名?

时间:2011-11-23 09:51:02

标签: java xml

我发现了与我相似的问题,但不完全一样。

你知道,我想要做的是一个程序,它可以搜索目录中的范围og XML文件,并告诉我哪些xml文件包含给定的字符串..

作为一个例子:我搜索"性感,我知道它"该程序将告诉我" 4.xml"因为有书面的性感,我知道它#34;在那个XML文件中,我找到了一种识别所有XML文件的方法,但现在我只需要一些可以搜索这些XML文件的代码,并输出包含我的字符串的XML文件的标题。

我这样定义的代码:

  

String path =" C:/ Users / Daniel / Desktop / CD&#34 ;;
   文件夹=新文件(路径);
   File [] listOfFiles = folder.listFiles();
   System.out.println(listOfFiles.length);

1 个答案:

答案 0 :(得分:3)

原始文件IO

此方法不考虑任何XML标记或任何内容。它只是检查文件中包含的给定字符串

您需要做的基本步骤是使用裸文件:

  1. 循环浏览listOfFiles
  2. 中的文件
  3. 打开每个文件(请参阅FileReaderBufferedReader
  4. 阅读内容(例如逐行readLine
  5. 检查您的字符串是否在阅读内容中
  6. 如果是,请输出文件名并继续下一个文件
  7. 或以最小代码:

    // In looping through files:
    // Step 2:
    BufferedReader r = new BufferedReader(new FileReader(f)); 
    // Step 3:
    String s = r.readLine();
    while (s != null) {
        // Step 4:
        if (s.contains("TestString")) {
            // Step 5:
            System.out.println(f.getAbsolutePath());
            break;
        }
        s = r.readLine();
    }
    r.close();
    

    请注意,如果字符串中有换行符,则无法使用此功能!

    SAX2

    SAX是一种面向流的XML解析器标准,它读取XML并向处理程序提供回调,例如:元素以它们出现的顺序开始,找到文本等。您可以使用它来检查XML中的文本内容,还可以实现一个状态处理程序来跟踪文本是否真的遇到<string>元素,但这有点复杂。

    这是使用SAX2实现的方法:

    1. 在您的班级中实施ContentHandler SAX界面
    2. 在该内容处理程序中,实施characters方法以检查字符串
    3. 使用XMLReaderFactory.createXMLReader()
    4. 创建一个阅读器
    5. 在阅读器上使用setContentHandler设置内容处理程序
    6. 使用InputSource为您的文件
    7. 在阅读器上致电parse

      DOM

      DOM是一种标准的XML模型,它在内存中构建可以遍历的节点树。这种方法非常简单:

      1. 使用DocumentBuilder
      2. 将XML解析为DOM
      3. 使用getElementsByTagName
      4. 获取所有<string>元素
      5. 使用getNodeValue
      6. 检查其值是否等于您的测试字符串

        代码:

        Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
        NodeList l = d.getElementsByTagName("string");
        for (int i = 0; i < l.getLength(); ++i) {
            if ("TestString".equals(l.item(i).getNodeValue())) {
                System.out.println(f.getAbsolutePath());
                break;
            }
        }
        

        希望这会有所帮助。