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

标签 java xml

我发现了与我类似的问题,但并不完全相同。

你看,我正在尝试制作一个程序,它可以搜索目录中的一系列 XML 文件并告诉我哪些 xml 文件包含给定的字符串..

举个例子:我搜索“sexy and i Know it”,程序会告诉我“4.xml”,因为该 XML 文件中写着“sexy and i Know it”,我找到了一种方法识别所有 XML 文件,但现在我只需要一些代码来搜索这些 XML 文件并给出包含我的字符串的 XML 文件的输出标题。

我所做的定义代码如下:

String path = "C:/Users/Daniel/Desktop/CD";
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
System.out.println(listOfFiles.length);

最佳答案

原始文件 IO

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

您必须执行的基本步骤是使用裸文件:

  1. 循环访问 listOfFiles 中的文件
  2. 打开每个文件(请参阅 FileReader BufferedReader )
  3. 阅读内容(例如,使用 readLine 逐行阅读)
  4. 检查您的字符串是否在读取的内容中
  5. 如果是,则输出文件名并继续处理下一个文件

或者用最少的代码:

// 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 接口(interface)
  2. 在该内容处理程序中,实现 characters 检查字符串的方法
  3. 使用 XMLReaderFactory.createXMLReader() 创建阅读器
  4. 使用 setContentHandler 设置您的内容处理程序关于读者
  5. 调用 parse在阅读器上显示 InputSource 为您的文件

DOM

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

  1. 使用 DocumentBuilder 将 XML 解析为 DOM
  2. 获取全部 <string>使用 getElementsByTagName 的元素
  3. 使用 getNodeValue 检查它们的值是否等于您的测试字符串

代码:

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;
    }
}

希望这有帮助。

关于java - 如何在 Java 中搜索 XML 文件,然后输出 XML 文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8240128/

相关文章:

java - 如何在关闭后保存 Java 应用程序的自定义状态?

java - 测量某个数据结构的内存使用情况

xml - xsd 模式可以验证编码吗? UTF-8,可能吗?

Android 错误膨胀类 android.support.design.widget.NavigationView

xml - Wix 工具集自定义 UI 查看器

java - 在包 'layout_alignParentEnd' Activity_post.xml/DispatchActivity/res/layout 第 23 行中找不到属性 'android' 的资源标识符

java - 如何使用java在中间添加一个抽象类并调用函数?

使用 Spring ConstraintValidator 进行枚举的 javax.validation.UnexpectedTypeException

java - 我正在尝试读取文本文件并将其存储在对象的数组列表中

xml - 有没有办法使用浏览器手动发布到休息网络服务