2014-01-16 2 views
0

XML 파일 구문 분석에 문제가 있습니다. 구조는 다음과 같습니다.특정 XML 파일 구문 분석

<?xml version="1.0" encoding="UTF-8"?> 
<teryt> 
<catalog name="TERC" type="all" date="2014-01-01"> 
<row> 
<col name="WOJ">02</col> 
<col name="POW"/> 
<col name="GMI"/> 
<col name="RODZ"/> 
<col name="NAZWA">DOLNOŚLĄSKIE</col> 
<col name="NAZDOD">województwo</col> 
<col name="STAN_NA">2014-01-01</col> 
</row> 
<row> 
<col name="WOJ">02</col> 
<col name="POW">01</col> 
<col name="GMI"/> 
<col name="RODZ"/> 
<col name="NAZWA">bolesławiecki</col> 
<col name="NAZDOD">powiat</col> 
<col name="STAN_NA">2014-01-01</col> 
</row> 
... 
</catalog 
</teryt> 

필자는 파서를 가지고 있지만 하나의 변수 만 파일을 읽습니다. 내 파서 코드.

package pl.op.web.common; 

import org.jboss.seam.ScopeType; 
import org.jboss.seam.annotations.Name; 
import org.jboss.seam.annotations.Scope; 
import org.primefaces.event.FileUploadEvent; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 

import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 

import java.io.IOException; 
import java.io.InputStream; 

@Name("op.xmlParser") 
@Scope(ScopeType.SESSION) 
public class XMLParser extends DefaultHandler { 

    private Logger log = LoggerFactory.getLogger(XMLParser.class); 

    private InputStream uploadedAreaFile; 

    public void uploadAreaXML(FileUploadEvent event) { 
     try { 
      uploadedAreaFile = event.getFile().getInputstream(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
     public void getAreaXml() { 
      try { 
       SAXParserFactory saxParserFactory = SAXParserFactory 
         .newInstance(); 
       SAXParser saxParser = saxParserFactory.newSAXParser(); 

       DefaultHandler defaultHandler = new DefaultHandler() { 

        Boolean wojTag = false; 
        Boolean powTag = false; 
        Boolean gmiTag = false; 
        Boolean rodzTag = false; 
        Boolean nazwaTag = false; 
        Boolean nazdodTag = false; 
        Boolean stan_naTag = false; 

        public void startElement(String uri, String localName, 
          String qName, Attributes attributes) 
          throws SAXException { 

         if (qName.equalsIgnoreCase("col")) { 
          wojTag = true; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          powTag = true; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          gmiTag = true; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          rodzTag = true; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          nazwaTag = true; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          nazdodTag = true; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          stan_naTag = true; 
         } 
        } 

        public void characters(char ch[], int start, int length) 
          throws SAXException { 

         if (wojTag.equals(true)) { 
          log.info("Woj : " 
            + new String(ch, start, length)); 
         } 
         if (powTag.equals(true)) { 
          log.info("Pow : " 
            + new String(ch, start, length)); 
         } 
         if (gmiTag.equals(true)) { 
          log.info("Gmi : " 
            + new String(ch, start, length)); 
         } 
         if (rodzTag.equals(true)) { 
          log.info("Rodz : " 
            + new String(ch, start, length)); 
         } 
         if (nazwaTag.equals(true)) { 
          log.info("Nazwa : " 
            + new String(ch, start, length)); 
         } 
         if (nazdodTag.equals(true)) { 
          log.info("Nazdod : " 
            + new String(ch, start, length)); 
         } 
         if (stan_naTag.equals(true)) { 
          log.info("Stan_na : " 
            + new String(ch, start, length)); 
         } 
        } 

        public void endElement(String uri, String localName, 
          String qName) throws SAXException { 

         if (qName.equalsIgnoreCase("col")) { 
          wojTag = false; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          powTag = false; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          gmiTag = false; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          rodzTag = false; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          nazwaTag = false; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          nazdodTag = false; 
         } 
         if (qName.equalsIgnoreCase("col")) { 
          stan_naTag = false; 
         } 
        } 
       }; 

      saxParser.parse(uploadedAreaFile, defaultHandler); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}  

어떻게 하나의 변수에 모든 속성 (WOJ, POW, NAZWA 등)을 넣을 수 있습니까?

+0

출력물을 원하는대로 가져올 수 없습니까? 필요한 출력 예제를 입력 할 수 있습니까? @ Nidhhog – Donvino

+0

의 모든 데이터를 단일 변수로 가져 오려고합니다. 02의 데이터를 좋아합니다. 나머지는 "02"로 문자열 woj에 넣고 싶습니다. – Nidhhogg

+0

그래서 col의 모든 데이터로 String 변수 만 필요합니까? – Donvino

답변

0

이렇게하면 ...

패키지 pl.op.web.common;

import java.util.ArrayList; 

import java.util.List; 

import javax.xml.parsers.SAXParser; 

import javax.xml.parsers.SAXParserFactory; 

import org.xml.sax.Attributes; 

import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 

public class XMLParser extends DefaultHandler { 
    public static void main(String[] args) { 
     XMLParser parser = new XMLParser(); 
     parser.getAreaXml(); 
    } 

    public void getAreaXml() { 
     final List<StringBuilder> first = new ArrayList<StringBuilder>(); 
     try { 
      SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); 
      SAXParser saxParser = saxParserFactory.newSAXParser(); 
      DefaultHandler defaultHandler = new DefaultHandler() { 
       Boolean wojTag = false; 
       Boolean powTag = false; 
       Boolean gmiTag = false; 
       Boolean rodzTag = false; 
       Boolean nazwaTag = false; 
       Boolean nazdodTag = false; 
       Boolean stan_naTag = false; 

       public void startElement(String uri, String localName, 
         String qName, Attributes attributes) 
         throws SAXException { 

        if (qName.equalsIgnoreCase("col")) { 
         if (attributes.getValue(0) != null) 
          if (attributes.getValue(0).equalsIgnoreCase("WOJ")) 
           wojTag = true; 

         if (attributes.getValue(0) != null) 
          if (attributes.getValue(0).equalsIgnoreCase("POW")) 
           powTag = true; 

         if (attributes.getValue(0) != null) 
          if (attributes.getValue(0).equalsIgnoreCase("GMI")) 
           gmiTag = true; 

         if (attributes.getValue(0) != null) 
          if (attributes.getValue(0).equalsIgnoreCase("RODZ")) 
           rodzTag = true; 

         if (attributes.getValue(0) != null) 
          if (attributes.getValue(0) 
            .equalsIgnoreCase("NAZWA")) 
           nazwaTag = true; 

         if (attributes.getValue(0) != null) 
          if (attributes.getValue(0).equalsIgnoreCase(
            "NAZDOD")) 
           nazdodTag = true; 
         if (attributes.getValue(0) != null) 
          if (attributes.getValue(0).equalsIgnoreCase(
            "STAN_NA")) 
           stan_naTag = true; 
        } 
       } 

       public void characters(char ch[], int start, int length) 
         throws SAXException { 

        StringBuilder temp = new StringBuilder(); 

        if (wojTag.equals(true)) { 

         temp.append(new String(ch, start, length)); 
         temp.append(" "); 
        } 
        if (powTag.equals(true)) { 

         temp.append(new String(ch, start, length)); 
         temp.append(" "); 
        } 
        if (gmiTag.equals(true)) { 

         temp.append(new String(ch, start, length)); 
         temp.append(" "); 
        } 
        if (rodzTag.equals(true)) { 

         temp.append(new String(ch, start, length)); 
         temp.append(" "); 
        } 
        if (nazwaTag.equals(true)) { 

         temp.append(new String(ch, start, length)); 
         temp.append(" "); 
        } 
        if (nazdodTag.equals(true)) { 

         temp.append(new String(ch, start, length)); 
         temp.append(" "); 
        } 
        if (stan_naTag.equals(true)) { 

         temp.append(new String(ch, start, length)); 
         temp.append(" "); 
        } 

        first.add(temp); 
       } 

       public void endElement(String uri, String localName, 
         String qName) throws SAXException { 

        if (qName.equalsIgnoreCase("col")) { 
         wojTag = false; 
        } 
        if (qName.equalsIgnoreCase("col")) { 
         powTag = false; 
        } 
        if (qName.equalsIgnoreCase("col")) { 
         gmiTag = false; 
        } 
        if (qName.equalsIgnoreCase("col")) { 
         rodzTag = false; 
        } 
        if (qName.equalsIgnoreCase("col")) { 
         nazwaTag = false; 
        } 
        if (qName.equalsIgnoreCase("col")) { 
         nazdodTag = false; 
        } 
        if (qName.equalsIgnoreCase("col")) { 
         stan_naTag = false; 
        } 
       } 
      }; 

      saxParser.parse("E:/ResourcePDF/zippertest/src/test.xml", 
        defaultHandler); 

      for (StringBuilder s : first) { 
       System.out.print(s); 

      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

넣어 위의 XML 파일

02 DOLNO? L에 대해 다음과 같이 될 것입니다 밖으로? SKIE이 2014년 1월 1일 02 01 boles을 województwo? awiecki powiat 2014년 1월 1일

암의 stroing data btw 행 태그를 하나의 StringBuilder에 저장합니다. "first"stringbuilder 목록에 추가하십시오. 그런 다음 인쇄하십시오.