我有许多不同的结构但不同的xml文档 他们都有一个我想读的元素。那个元素是
<text>
例如我有这个结构
<foo>
<description></description>
<date></date>
<link></link>
<item>
<description></description>
<text></text> // THIS IS WHAT I NEED
</item>
</foo>
如何从每个xml文件中获取这些元素 使用java sax解析器独立于其结构?
答案 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>