我发现了与我相似的问题,但不完全一样。
你知道,我想要做的是一个程序,它可以搜索目录中的范围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);
答案 0 :(得分:3)
此方法不考虑任何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();
请注意,如果字符串中有换行符,则无法使用此功能!
SAX是一种面向流的XML解析器标准,它读取XML并向处理程序提供回调,例如:元素以它们出现的顺序开始,找到文本等。您可以使用它来检查XML中的文本内容,还可以实现一个状态处理程序来跟踪文本是否真的遇到<string>
元素,但这有点复杂。
这是使用SAX2实现的方法:
ContentHandler
SAX界面characters
方法以检查字符串XMLReaderFactory.createXMLReader()
setContentHandler
设置内容处理程序InputSource
为您的文件parse
醇>
DOM是一种标准的XML模型,它在内存中构建可以遍历的节点树。这种方法非常简单:
DocumentBuilder
getElementsByTagName
<string>
元素
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;
}
}
希望这会有所帮助。