我发现了与我类似的问题,但并不完全相同。
你看,我正在尝试制作一个程序,它可以搜索目录中的一系列 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 标记或任何内容。它只是检查文件中包含的给定字符串
您必须执行的基本步骤是使用裸文件:
- 循环访问
listOfFiles
中的文件 - 打开每个文件(请参阅
FileReader
和BufferedReader
) - 阅读内容(例如,使用
readLine
逐行阅读) - 检查您的字符串是否在读取的内容中
- 如果是,则输出文件名并继续处理下一个文件
或者用最少的代码:
// 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 实现要做的事情:
- 实现
ContentHandler
类中的 SAX 接口(interface) - 在该内容处理程序中,实现
characters
检查字符串的方法 - 使用
XMLReaderFactory.createXMLReader()
创建阅读器 - 使用
setContentHandler
设置您的内容处理程序关于读者 - 调用
parse
在阅读器上显示InputSource
为您的文件
DOM
DOM 是一种标准 XML 模型,它在内存中构建可遍历的节点树。这个方法使用起来非常简单:
- 使用
DocumentBuilder
将 XML 解析为 DOM - 获取全部
<string>
使用getElementsByTagName
的元素 - 使用
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/