java解析xml集合_java解析xml的4种经典⽅法1、⽰例XML为l,如下:
天龙⼋部
⾦庸
2014
88
⿅⿍记
2015
66
中⽂
射雕英雄传
⾦庸
2016
44
⼀、DOM(Document Object Model)解析
优点:
1)允许应⽤程序对数据和结构做出更改。
2)访问是双向的,可以在任何时候再树中上、下导航获取、操作任意部分的数据。
缺点:
解析XML⽂档的需要加载整个⽂档来构造层次结构,消耗内存资源⼤。
应⽤范围:
遍历能⼒强,常应⽤于XML⽂档需要频繁改变的服务中。
Java使⽤步骤:
创建⼀个DocumentBuilderFactory对象。
创建⼀个DocumentBuilder对象。
通过DocumentBuilder的parse⽅法加载XML到当前⼯程⽬录下。
通过getElementsByTagName⽅法获取所有XML所有节点的集合。
遍历所有节点。
通过item⽅法获取某个节点的属性。
通过getNodeName和getNodeValue⽅法获取属性名和属性值。
通过getChildNodes⽅法获取⼦节点,并遍历所有⼦节点。
通过getNodeName和getTextContent⽅法获取⼦节点名称和⼦节点值。
package Paint;
import java.io.IOException;
l.parsers.DocumentBuilder;
l.parsers.DocumentBuilderFactory;
l.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
l.sax.SAXException;
public class DOMTest {
public static void main(String[] args) {
DocumentBuilderFactory dbf = wInstance();
try {
DocumentBuilder db = wDocumentBuilder();
Document document = db.parse("./src/l");
NodeList bookList = ElementsByTagName("book");//节点集
int bookCnt = Length();
for(int i=0; i
Node book = bookList.item(i);
NamedNodeMap attrs = Attributes();
for(int j=0; j
Node attr = attrs.item(j);
}
NodeList childNodes = ChildNodes();
for(int k=0; k
if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE){
System.out.println(childNodes.item(k).getNodeName()+"---" + childNodes.item(k).getTextContent()); }
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
⼆. SAX(Simple API for XML)解析
优点:
1)不需要等待所有的数据被处理,解析就可以开始。
2)只在读取数据时检查数据,不需要保存在内存中。
3) 可以在某⼀个条件满⾜时停⽌解析,不必要解析整个⽂档。
4) 效率和性能较⾼,能解析⼤于系统内存的⽂档。
缺点:
1)解析逻辑复杂,需要应⽤层⾃⼰负责逻辑处理,⽂档越复杂程序越复杂。
2)单向导航,⽆法定位⽂档层次,很难同时同时访问同⼀⽂档的不同部分数据,不⽀持XPath.解析步骤:
获取⼀个SAXParserFactory的实例。
通过factory获取SAXParser实例。
创建⼀个handler对象。
通过parser的parse()⽅法来解析XML。
private String id;
private String name;
private String author;
private String year;
private String price;
private String language;
// getter和setter⽅法略
}
package Paint;
import java.io.IOException;
l.parsers.ParserConfigurationException;
l.parsers.SAXParser;
l.parsers.SAXParserFactory;
l.sax.SAXException;
public class SAXTest {
public static void main(String[] args) {
//获取实例
SAXParserFactory factory = wInstance(); try {
SAXParser parser = wSAXParser(); SAXParserHandler handler = new SAXParserHandler(); parser.parse("./src/l", handler);
System.out.Name());
System.out.println("id=" + Id());
System.out.Author());
System.out.Year());
System.out.Price());
System.out.Language());
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package Paint;
import java.util.ArrayList;
l.sax.Attributes;
l.sax.SAXException;
l.sax.helpers.DefaultHandler;
public class SAXParserHandler extends DefaultHandler { String value = null;
Book book = null;
private ArrayList bookList = new ArrayList();
public ArrayList getBookList() {
return bookList;
}
/*
* XML解析开始
*/
public void startDocument() throws SAXException {
使用dom4j解析xml文件super.startDocument();
System.out.println("xml解析开始");
}
/*
* XML解析结束
*/
public void endDocument() throws SAXException {
System.out.println("xml解析结束");
}
/*
* 解析XML元素开始
*/
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if(qName.equals("book")){
book = new Book();
for(int i=0; i
System.out.QName(i)+"---"+Value(i)); QName(i).equals("id")){
book.Value(i));
}
}
}else if(!qName.equals("bookstore")){
System.out.print("节点名:"+ qName + "---");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论