2017-05-07 7 views
0

SAXParser에서 새로운 요소입니다. XML 파일에서 요소 (DefaultHandler 클래스의 characters() 메서드를 사용하여 요소를 읽으려고합니다. 요소가오고 있지만 공백이오고 있습니다.DefaultHandler의 characters() 메소드에서 공백을 제거하는 방법?

Here is my code:- 
student.xml 

    <?xml version="1.0" encoding="UTF-8"?> 
    <students> 
     <student> 
      <sno>10</sno> 
      <sname>Vikas</sname> 
     </student> 
    </students> 

here is Student.java:- 
package com.vikubabu; 

public class Student { 
    private Integer sno; 
    private String sname; 

    public Integer getSno() { 
     return sno; 
    } 

    public void setSno(Integer sno) { 
     this.sno = sno; 
    } 

    public String getSname() { 
     return sname; 
    } 

    public void setSname(String sname) { 
     this.sname = sname; 
    } 

    @Override 
    public String toString() { 
     return "Student [sno=" + sno + ", sname=" + sname + "]"; 
    } 

} 

다음은 DefaultHandler 클래스를 확장하는 MyHandler 클래스입니다. 그들이 당신의 XML에 존재하기 때문에 MyHandler.java:-

package com.vikubabu; 

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

public class MyHandler extends DefaultHandler { 
    StringBuilder builder; 
    @Override 
    public void startDocument() throws SAXException { 
     //System.out.println(); 
     builder=new StringBuilder(); 

    } 
    @Override 
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
     super.startElement(uri, localName, qName, attributes); 
    } 
    @Override 
    public void endElement(String uri, String localName, String qName) throws SAXException { 
     super.endElement(uri, localName, qName); 
    } 
    @Override 
    public void characters(char[] ch, int start, int length) throws SAXException { 
    String tag= new String(ch,start,length); 
     builder.append(tag); 
     System.out.println(tag); 
    } 

    @Override 
    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { 
     // TODO Auto-generated method stub 
     super.ignorableWhitespace(ch, start, length); 
    } 

} 


and here finally, 

App.java which containing the main method:- 

    package com.vikubabu; 

import java.io.IOException; 

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

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

public class App { 

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { 
     SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); 
     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
     documentBuilderFactory.setIgnoringElementContentWhitespace(Boolean.TRUE); 
     saxParserFactory.setNamespaceAware(Boolean.TRUE); 
     SAXParser saxParser = saxParserFactory.newSAXParser(); 
     MyHandler myHandler=new MyHandler(); 
     saxParser.parse("student.xml", myHandler); 

    } 

} 

답변

1

당신은 공백을 얻고있다. 문자 함수는 태그를 제외한 XML의 모든 문자를 읽습니다. 빌더에 문자를 추가하는 동안 어떤 종류의 점검도 적용하지 않으므로 모든 공백이 인쇄됩니다. XML의 모든 공백을 바꿔 넣으면 그 결과를 얻지 못한다는 것을 확인할 수 있습니다.

또는 당신은 당신의 현재 XML에 대한 변경 아래에 시도 할 수 있습니다 :

public void characters(char[] ch, int start, int length) throws SAXException { 
    String tag= new String(ch,start,length);   
    if(tag.trim().length()>0){ 
     builder.append(tag); 
     System.out.println(tag);  
    } 
}