XML之DOM解析

来源:互联网 发布:银行数据录入员累吗 编辑:程序博客网 时间:2024/05/22 14:20

DOM解析代码:

import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class DOMTest {public static void main(String[] args) {//获取DocumentBuilderFactory工厂DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();try {//获取DocumentBuilder解析器对象DocumentBuilder db = dbf.newDocumentBuilder();//调用对象的parse()方法,返回Document对象Document document=db.parse("book.xml");//获取book节点的集合NodeList bookList = document.getElementsByTagName("book");//获取长度打印出来,多少个book节点System.out.println("xml中有book节点:"+bookList.getLength()+"个");for(int i =0;i<bookList.getLength();i++){//通过item()方法获取book节点Node book = bookList.item(i);//遍历book节点的所有属性NamedNodeMap nnm = book.getAttributes();System.out.println("-----------第"+(i+1)+"本书开始遍历-------");//遍历book节点的属性for(int j=0;j<nnm.getLength();j++){//item()获取属性Node node = nnm.item(j);System.out.println(node.getNodeName()+":"+node.getNodeValue());//解析book节点的子节点NodeList childNodes = book.getChildNodes();//子节点的遍历for(int k=0;k<childNodes.getLength();k++){//判断text类型的node 和 element类型的nodeif(childNodes.item(k).getNodeType()==Node.ELEMENT_NODE){//打印element类型的node的名字和值System.out.println("子节点名:"+childNodes.item(k).getNodeName()+"---值:"+childNodes.item(k).getFirstChild().getNodeValue());}}}}} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}



xml文件:
<?xml version="1.0" encoding="UTF-8"?><books><book id="1"><name>厚黑学</name><price>45</price></book><book id="2"><name>做人不要太老实</name><author>水中鱼</author></book><book id="3"><name>心理学</name><author>周光宇</author><price>23</price></book></books>



打印结果: