2014-07-29 2 views
0

У меня есть много разных xml-документов с разными strucutre, но все они имеют один элемент, который я хочу прочитать. этот элементXML Прочитайте один специальный элемент из разных xml-файлов с помощью java saxparser

<text> 

, например, у меня есть этот strucutre

<foo> 
    <description></description> 
    <date></date> 
    <link></link> 
     <item> 
      <description></description> 
      <text></text> // THIS IS WHAT I NEED 
     </item> 
</foo> 

Как я могу получить эти элементы из каждого XML-файла независимого его strucutre с помощью Java саксофоне анализатор?

ответ

1

Если у вас есть определенное имя тега (например, текст), вам нужно только проверить и получить значение тега в XML Reader. Добавьте any.xml в класс-путь. Попробуйте, как показано ниже.

XMLReader.java

import java.io.CharArrayWriter; 
import java.io.FileInputStream; 
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 XMLReader { 
    private Reader reader = new Reader(); 
    private class Reader extends DefaultHandler { 
     private List<String> textList = new ArrayList<String>(); 
     private CharArrayWriter text; 

     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
      text = new CharArrayWriter(); 
     } 

     public void endElement(String uri, String localName, String qName) throws SAXException { 
      if(qName.equalsIgnoreCase("text")) { 
       textList.add(text.toString().trim()); 
      } 
     } 

     public void characters(char[] ch, int start, int length) throws SAXException { 
      text.write(ch, start, length); 
     } 

     public List<String> getTextList() { 
      return textList; 
     } 
    } 
    public List<String> getTextList() { 
     return reader.getTextList(); 
    } 

    public void load() { 
     try { 
      SAXParserFactory factory = SAXParserFactory.newInstance(); 
      SAXParser saxParser = factory.newSAXParser(); 
      saxParser.parse(new FileInputStream("any.xml"), reader); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     }  
    } 
    public static void main(String[] args) { 
     XMLReader reader = new XMLReader(); 
     reader.load(); 
     List<String> textList = reader.getTextList(); 
     for(String text : textList) { 
      System.out.println(text); 
     } 
    } 
} 

any.xml

<?xml version="1.0" encoding="UTF-8"?> 
<foo> 
    <description></description> 
    <date></date> 
    <link></link> 
    <item> 
     <description></description> 
     <text>xxxx</text> 
    </item> 
    <text>yyyyy</text> 
    <any> 
     <text>zzzzz</text>  
    </any> 
</foo>