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 + "]"; 
    } 

} 

ここは、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); 

    } 

} 

答えて

1

彼らはあなたの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);  
    } 
} 
関連する問題