XML使用java saxparser从不同的xml文件中读取一个特殊元素

时间:2014-07-29 11:09:33

标签: java xml saxparser

我有许多不同的结构但不同的xml文档 他们都有一个我想读的元素。那个元素是

<text>

例如我有这个结构

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

如何从每个xml文件中获取这些元素 使用java sax解析器独立于其结构?

1 个答案:

答案 0 :(得分: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>