xml 解析的四种方法

1  DOM解析

是将这个xml文件装入内存

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document document = builder.parse("books.xml");

Element bookStore = document.getDocumentElement();//获取根节点。

节点有三种:元素节点、属性节点、文本节点

getTextContent() 获取节点的文本

getFirstChild().getNodeValue() //获取子节点,俩个方法都可以获取文本,视具体情况而定。

2 SAX解析

是将xlm文档从上到下解析,一步一步来解析元素节点,将解析xml的工作交给了Handler,所以需要用户自己实现DefaultHandler

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser saxParse = factory.newSAXParser();

SAXHandler handler = new SAXHandler();

saxParse.parse(newFileInputStream("books.xml"), handler);

public void startDocument() throws SAXException {

}

public void endDocument() throws SAXException {

}

当文档开始解析和结束解析会调用上面的方法

public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {}

public void endElement(String arg0, String arg1, String arg2) throws SAXException {}

解析elements,

public void characters(char[] arg0, int arg1, int arg2) throws SAXException {

}

用来保存整个xml文档的,可以通过String st = new String(ch, start, length);来获得当前元素的内容,空白节点也算

3 JDOM解析:有点类似DOM解析

导入jdom.jar 。org.jdom2

SAXBuilder builder = new SAXBuilder();

InputStream is = new FileInputStream("books.xml");

Document document = builder.build(is);

Element element = document.getRootElement(); //获取根节点

List<Element> bookList = element.getChildren();

处理乱码问题:通过InputStreamReader来实现

InputStream is = new FileInputStream("books.xml");

Reader reader = new InputStreamReader(is, "utf-8");

Document document = builder.build(reader);

4 DOM4j解析:

导入jar,获取元素使用的都是迭代器

SAXReader reader = new SAXReader();

Reader r = new InputStreamReader(new FileInputStream("books.xml"), "UTF-8");

Document document = reader.read(r);

Element element = document.getRootElement();

Iterator<Element> iterator = element.elementIterator();

总结

DOM和SAX解析是官方提供的,DOM解析是平台无关的,SAX是基于事件驱动的,剩下的俩种是从这里衍生出来的,只能Java使用

DOM:形成树结构,便于理解,解析过程中树结构留在了内存中,可以一边修改一边解析,xml文件过大时可能会造成内存溢出

SAX:是基于事件驱动解析的,即一步一步来解析,从元素的开始标签到结束,内存耗费小,适用于只处理数据的情况。 不宜编码,访问同一xml的不同位置比较费劲

JDOM:使用具体类,获取子节点或元素都是通过集合形式

DOM4J:使用抽象和接口,性能优异,功能强大

解析速度:SAX最快,一般使用DOM4J

猜你喜欢

转载自blog.csdn.net/qq_39158142/article/details/85248036