Java 显示包含特定字符串的所有XML文件的名称

Java 显示包含特定字符串的所有XML文件的名称,java,xml,xml-parsing,string-parsing,stax,Java,Xml,Xml Parsing,String Parsing,Stax,我试图从一个名为MasterData.xml的xml文件中提取包含特定关键字的所有协议,然后在一个名为DataDefinition(包含许多xml文件)的文件夹中搜索这些协议。我能够完成第一部分,但在第二部分遇到问题,即在许多xml文件中搜索特定协议。请帮助 MasterData.xml <?xml version="1.0" encoding="UTF-8"?> <CDMDataXML xmlns="http://www.avocent.org/trellis/C

我试图从一个名为MasterData.xml的xml文件中提取包含特定关键字的所有协议,然后在一个名为DataDefinition(包含许多xml文件)的文件夹中搜索这些协议。我能够完成第一部分,但在第二部分遇到问题,即在许多xml文件中搜索特定协议。请帮助

MasterData.xml

   <?xml version="1.0" encoding="UTF-8"?>
   <CDMDataXML xmlns="http://www.avocent.org/trellis/CDMLoaderXMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.avocent.org/trellis/CDMLoaderXMLSchema CDMLoaderXMLSchema.xsd">
<NetworkProtocolDefinition oid="00000000-0000-0000-0000-000000004236">
<NAME>res.dcim.networkprotocol.def.SNMPV1-SSL</NAME>
<PROTOCOLTAG>SNMPV1:SSL</PROTOCOLTAG>
</NetworkProtocolDefinition>
<NetworkProtocolDefinition oid="00000000-0000-0000-0000-000000004237">
<NAME>res.dcim.networkprotocol.def.SNMPV2-SSL</NAME>
<PROTOCOLTAG>SNMPV2:SSL</PROTOCOLTAG>
</NetworkProtocolDefinition>
<NetworkProtocolDefinition oid="00000000-0000-0000-0000-000000004238">
<NAME>res.dcim.networkprotocol.def.BACNET-SITELINK_W-LDM-BREAKER-RS-485</NAME>
<PROTOCOLTAG>BACNET:SITELINK_W-LDM-BREAKER/RS-485</PROTOCOLTAG>
</NetworkProtocolDefinition>
<NetworkProtocolDefinition oid="00000000-0000-0000-0000-000000004239">
<NAME>res.dcim.networkprotocol.def.BACNET-SITELINK_W-LDM-SUBFEED-RS-485</NAME>
<PROTOCOLTAG>BACNET:SITELINK_W-LDM-SUBFEED/RS-485</PROTOCOLTAG>
</NetworkProtocolDefinition>
</CDMDataXML>
因此,我想在位于文件夹DataDefinition的所有XML文件中搜索以下2个协议,并打印包含该特定协议的文件的名称

 BACNET:SITELINK_W-LDM-BREAKER/RS-485
 BACNET:SITELINK_W-LDM-SUBFEED/RS-485

由于文件夹中的某些文件有30k行,我正在寻找一种消耗更少内存的解决方案。

如果我理解正确,我将分两步完成。 1列出MasterData.xml文件中的所有协议。 2创建一个映射,其中协议是密钥,该值将是包含此协议的所有文件的列表。
我可能会使用XPath来简化搜索。

是的,从上面的代码中可以看出,我能够完成第一部分。这是我需要帮助的第二部分..一些提示我将这样做:1初始化一个映射,其中协议是关键,对于每个协议,为目录中的每个文件初始化一个字符串1的列表2打开它,通过Xpath 3为每个创建的协议搜索协议,获取Map元素并将文件名添加到列表中
 BACNET:SITELINK_W-LDM-BREAKER/RS-485
 BACNET:SITELINK_W-LDM-SUBFEED/RS-485