首页 > 学院 > 开发设计 > 正文

JAVA解析XML之DOM方式

2019-11-15 01:04:36
字体:
来源:转载
供稿:网友
java解析xml之DOM方式JAVA解析XML之DOM方式准备工作

  创建DocumentBuilderFactory对象;

  创建DocumentBuilder对象;

  通过DocumentBuilder对象的parse方法加载xml

解析XML文件的属性名和属性值解析XML文件的节点名和节点值  常用方法如下:

    getElementsByTagName();

    getLength();

    item();

    getNodeName();

    getNodeValue();

    getNodeType();

    *getAttributes(); node

    *getAttribute("name"); element

    getChildNodes();

    getFirstChild();

  常用的节点类型:

    

下面直接上代码
package pers.zww.xml;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 Dom {    public static void main(String[] args) {        // 创建DocumentBuilderFactory对象        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        // 创建DocumentBuilder对象        DocumentBuilder db;        try {            db = dbf.newDocumentBuilder();            // 通过DocumentBuilder对象的parse方法加载xml            Document document = db.parse("books.xml");            // 获取book节点集合            NodeList bookList = document.getElementsByTagName("book");            // 通过noodlist的getLength()方法,获取长度            System.out.PRintln(bookList.getLength());            // 遍历book节点            for (int i = 0; i < bookList.getLength(); i++) {                System.out.println("=======================");                // item(i)方法获取节点                Node book = (Node) bookList.item(i);                // 获取book节点的所有属性集合                NamedNodeMap attrs = book.getAttributes();                // 遍历book的属性                System.out.println("第" + (i + 1) + "本书共有" + attrs.getLength()                        + "个属性");                for (int j = 0; j < attrs.getLength(); j++) {                    /*                     * 节点类型 TYPE                     * element   1                     * attr      2                     * text      3                     */                    /*                     * 若只有一个属性则                     * 将book节点node强制类型转换                     * 用element的getAttribute("id")方法                     */                    // item(i)方法获取属性                    Node attr = attrs.item(j);                    // 获取属性名                    System.out.print("属性名:" + attr.getNodeName());                    // 获取属性值                    System.out.println(" && 属性值:" + attr.getNodeValue());                    //解析book的子节点                    NodeList childNodes=book.getChildNodes();                    //获取每个节点的节点名/值                    System.out.println("共有"+childNodes.getLength()+"个子节点");                    for (int k = 0; k < childNodes.getLength(); k++) {                        //区分text类型的node以及element类型的node                        if (childNodes.item(k).getNodeType()==Node.ELEMENT_NODE) {                            //获取element类型节点的节点名                            System.out.print("节点名 "+childNodes.item(k).getNodeName());                            //获取element类型节点的节点值                                                        //法一:                            System.out.println(" && 节点值 "+childNodes.item(k).getFirstChild().getNodeValue());                                                        //法二:                            //子节点的所有值                            //System.out.println(" && 节点值 "+childNodes.item(k).getTextContent());                                                        /*                             * 不同点:                             * 若在name节点下再添加一个节点例如<h>xiumu</h>时,法一的值为null,                             * 而法二的值为xiumuJAVA编程思想                             */                        }                    }                }            }        } catch (ParserConfigurationException | SAXException | IOException e) {            e.printStackTrace();        }    }}
View Code

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <bookstore> 3     <book id="1"> 4         <name><h>xiumu</h>JAVA编程思想</name> 5         <anthor>****</anthor> 6         <year>2000</year> 7     </book> 8     <book id="2"> 9         <name>疯狂JAVA系列</name>10         <anthor>李刚</anthor>11         <price>89</price>12     </book>13 </bookstore>
View Code要点

  当已确定节点的属性只有一个时,可将节点强制转换为element,并调用其getAttribute("name")方法;

  getLength()方法子节点的个数时,将空白和换行也算了进去;

参考资料

  慕课网JessicaJiang老师视频教程


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表