코딩

공공데이터 API parser 데이터 오류잡기 본문

DB

공공데이터 API parser 데이터 오류잡기

ssooyn_n 2022. 5. 13. 00:43

공공데이터에서 SAXParser를 이용해서 데이터를 가져오는데,

이름이 온전하지 않은 데이터가 특별한 규칙 없이 발견되었다.

분명 같은 데이터가 공공데이터에서 조회 했을 땐, 잘 돌아갔는데 

약 3시간동안 찾아낸 결과..

원인은 바로 SAX parser에서 

It is not guaranteed that the characters() method will run only once inside an element.

If you are storing the content in a String, and the characters() method happens to run twice, you will only get the content from the second run. The second time that the characters method runs it will overwrite the contents of your temp variable that was stored from the first time.

xml에서 가져올 값을 String으로 저장하면, character() 메소드가 2번 실행이 되면서 데이터의 크기가 character메소드가 실행되는 크기보다 클 경우에 값이 두번으로 나뉘어져 저장되어 결국 마지막 나눠진 값만 String에 할당이 된다는 것이었다.

이에 대한 해결법은 StringBuilder을 이용하거나

 DefaultHandler handler = new DefaultHandler() {
     private StringBuilder stringBuilder;

     @Override
     public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {
         stringBuilder = new StringBuilder();
     }

     public void characters(char[] buffer, int start, int length) {
         stringBuilder.append(new String(buffer, start, length));
     }

     public void endElement(String uri, String localName, String qName) throws SAXException {
         System.out.println(stringBuilder.toString());
     }
 };

아니면, 이런식으로 temp = new String(); 이 아닌 temp+= new String()으로 이어 써주면 된다.

public void startElement(String uri, String localName, String qName, Attributes att) {
      temp = "";
}
   
public void characters(char[] ch, int start, int length) {
	temp += new String(ch, start, length);
}

 

 

출저

https://stackoverflow.com/questions/31568899/sax-parser-characters-method-doesnt-collect-all-content/31570178#31570178

 

SAX Parser characters method doesn't collect all content

I'm using SAX parser to parse XML and is working fine. I have below tag in XML. <value>•CERTASS >> Certass</value> Here I expect '•CERTASS >> Certass' as output. but below code

stackoverflow.com

 

'DB' 카테고리의 다른 글

[DB] 동시성에 관한 고찰  (0) 2022.12.12
[JPA] nativeQuery에서 dto 매핑하기  (0) 2022.12.12
[MySQL] Point Column 성능에 관한 고찰  (0) 2022.12.12
Comments