xml 파일에서 MasterData.xml이라는 특정 키워드를 포함하는 모든 프로토콜을 추출한 다음 많은 xml 파일이 포함 된 DataDefinition 폴더에서 해당 프로토콜을 각각 검색하려고합니다 . 나는특정 문자열이 포함 된 모든 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>
자바 코드를 많은 XML을 files.Please 도움말에서 특정 프로토콜을 찾고, 즉 제 2 부분의 첫번째 부분 만 가지고 문제를 할 수 있어요
Integer files_no= null;
File xml_files = new File("D:\\branches\\ENGINE-R3.2\\components\\ElementLibraries\\ElementLibraryPackages\\DataDefinition");
files_no = xml_files.listFiles().length;
String crits[] = new String [100];
Integer i = 0;
Integer COUNTER = 0;
XMLInputFactory f = XMLInputFactory.newInstance();
XMLStreamReader rdr = f.createXMLStreamReader(new FileReader("D:\\lucy\\MasterData\\MasterData.xml"));
while (rdr.hasNext()) {
if (rdr.next() == XMLStreamConstants.START_ELEMENT) {
if (rdr.getLocalName().equals("PROTOCOLTAG")) {
String txt = rdr.getElementText();
if (txt.contains("SITELINK")) { // You can also use "txt.indexOf("SITELINK") > 0"
System.out.println(txt);
COUNTER++;
crits[i]=txt;
i++;
}
}
}
}
System.out.println(COUNTER+"\n");
System.out.println(files_no);
그래서 DataDefinition 폴더에있는 모든 XML 파일에서 아래의 2 가지 프로토콜을 검색하고 특정 프로토콜이 포함 된 파일의 이름을 인쇄하려고합니다.
BACNET:SITELINK_W-LDM-BREAKER/RS-485
BACNET:SITELINK_W-LDM-SUBFEED/RS-485
폴더의 일부 파일에는 30k 줄이 있으므로 메모리를 덜 소모하는 솔루션을 찾고 있습니다.
예 위 코드에서 볼 수 있듯이 1 부를 할 수 있습니다. 그것은 두 번째 부분은 내가 도움이 필요합니다 ... – Lucy
somes 힌트 내가 그런 someting 할 것입니다 : 1) 프로토콜이 키이며, 각 프로토콜에 대한 초기화 문자열 목록을 초기화 1) 디렉토리의 각 파일에 대한 2) 열어서 Xpath를 통해 프로토콜을 검색하십시오. 3) 발견 된 각 프로토콜에 대해 map 요소를 가져 와서 파일 이름을 목록에 추가하십시오 – vincent