2015-01-22 3 views
0

"PROTOCOLTAG"태그에 모든 유형의 프로토콜을 포함하는 XML 파일이 있습니다. "SITELINK"라는 문자열이 포함 된 태그의 값만 추출하려고합니다. 현재 모든 태그 "PROTOCOLTAG"의 값을 가져올 수 있습니다. 도와주세요특정 문자열을 포함하는 XML 태그의 값 추출

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> 

자바 코드 ..

XMLInputFactory f = XMLInputFactory.newInstance(); 
XMLStreamReader rdr = f.createXMLStreamReader(new FileReader("test.xml")); 
while (rdr.hasNext()) { 
    if (rdr.next() == XMLStreamConstants.START_ELEMENT) { 
     if (rdr.getLocalName().equals("PROTOCOLTAG")) { 
      System.out.println(rdr.getElementText()); 
     } 
    } 
} 

예상 출력

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

전류 출력 ..

SNMPV1:SSL 
SNMPV2:SSL 
BACNET:SITELINK_W-LDM-BREAKER/RS-485 
BACNET:SITELINK_W-LDM-SUBFEED/RS-485 
+0

전류 출력 : 아무것도, 당신의 코드가 아무것도 출력하지 않기 때문에? – immibis

+0

변경했습니다. println 문을 잊어 버렸습니다. – Lucy

+1

XML 파싱 부분을 이미 완료 했으므로 문자열에 특정 하위 문자열이 포함되어 있는지 확인하는 방법을 알아야합니다. – immibis

답변

1
XMLInputFactory f = XMLInputFactory.newInstance(); 
XMLStreamReader rdr = f.createXMLStreamReader(new FileReader("C:\\Users\\pramod.karandikar\\Desktop\\Test.xml")); 
while (rdr.hasNext()) { 
     if (rdr.next() == XMLStreamConstants.START_ELEMENT) { 
      if (rdr.getLocalName().equals("PROTOCOLTAG")) { 
       String txt = rdr.getElementText(); 
       if (txt.indexOf("SITELINK") > 0) { 
        System.out.println(txt); 
       } 
      } 
     } 
} 
+0

또는'txt.contains ("SITELINK")'. 또한 코드는 SITELINK로 시작하는 행을 인쇄하지 않습니다. – immibis

+0

예,'indexOf'와'contains' 중 하나를 사용할 수 있습니다. –

+0

도움 주셔서 대단히 감사합니다 !! – Lucy

0

이() 메소드를 포함위한 것이다;

XMLInputFactory f = XMLInputFactory.newInstance(); 
XMLStreamReader rdr; 
try { 
    rdr = f.createXMLStreamReader(new FileReader("test.xml")); 
     while (rdr.hasNext()) { 
     if (rdr.next() == XMLStreamConstants.START_ELEMENT) { 
      if (rdr.getLocalName().equals("PROTOCOLTAG")) { 
       String str = rdr.getElementText().toString(); 
       if (str.toString().contains("SITELINK")) { 
       System.out.println(str); 
       } 
      } 
     } 
    } 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (XMLStreamException e) { 
    e.printStackTrace(); 
} 

}