如何从DefaultHandler的characters()方法中删除空格?

问题描述:

我是新来的SAXParser.I试图从DefaultHandler类的characters()方法读取XML文件中的元素。元素即将到来,但垂直空白即将到来。如何从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 + "]"; 
    } 

} 

这是我的MyHandler类,它扩展了DefaultHandler类。 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); 

    } 

} 

,因为它们存在于你的XML你得到空格。 字符函数将读取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);  
    } 
}