Dom4j工具解析XML

Dom4j非官方工具,不在jdk中

使用步骤:
            1)导入dom4j的核心包。 dom4j-1.6.1.jar
            2)编写Dom4j读取xml文件代码

Dom4j提供的xml解析器对象

public static void main(String[] args) {
        try {
            //1.创建一个xml解析器对象
            SAXReader reader = new SAXReader();
            //2.读取xml文档,返回Document对象
            Document doc = reader.read(new File("./src/contact.xml"));

            System.out.println(doc);
        } catch (DocumentException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }

    }

//得到节点信息
    @Test
    public void test1() throws Exception {

        //读取xml文档,返回Document对象
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("XmlDemo.xml"));

        //nodeIterator:得到当前节点下的所有节点对象
        Iterator<Node> it = document.nodeIterator();

        while (it.hasNext()) {
            //Node node =(Node) it.next();
            Node node = it.next();

            //判断其下面是否有子节点
            //只有标签节点才会有子节点(节点、标签、属性、文本)
            //判断当前节点是否是标签节点
            if(node instanceof Element){

                Element element = (Element) node;

                Iterator<Node> it2 = element.nodeIterator();

                while(it2.hasNext()){
                    Node n2 = it2.next();
                    System.out.println(n2.getName());
                }
            }

        }       
    }

/*
     * 遍历xml文档的所有节点
     */
    @Test
    public void test2() throws Exception{
        //读取xml文档,返回Document对象
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new File("XmlDemo.xml"));

        //得到根标签
        Element rootElement = doc.getRootElement();

        getChildNodes(rootElement);

    }


    private void getChildNodes(Element element){
        System.out.println(element.getName());

        //得到子节点
        Iterator<Node> it = element.nodeIterator();
        while(it.hasNext()){
            Node node = it.next();

            //判断是否是标签节点
            if(node instanceof Element){
                Element el = (Element)node;
                getChildNodes(el);
            }
        }
    }

/*
     * 获取属性
     */
    @Test
    public void test4() throws Exception{
        //1.读取xml文档,返回Document对象
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new File("XmlDemo.xml"));

        //获取属性:(先获的属性所在的标签对象,然后才能获取属性)
        //1.得到标签对象
        Element contactElem = doc.getRootElement().element("book");
        //2.得到属性
        //2.1  得到指定名称的属性值
        /*
        String idValue = contactElem.attributeValue("id");
        System.out.println(idValue);
        */

        //2.2 得到指定属性名称的属性对象
        /*Attribute idAttr = contactElem.attribute("id");
        //getName: 属性名称    getValue:属性值
        System.out.println(idAttr.getName() +"=" + idAttr.getValue());*/

        //2.3 得到所有属性对象,返回LIst集合
        /*List<Attribute> list = contactElem.attributes();
        //遍历属性
        for (Attribute attr : list) {
            System.out.println(attr.getName()+"="+attr.getValue());
        }*/

        //2.4 得到所有属性对象,返回迭代器
        Iterator<Attribute> it = contactElem.attributeIterator();
        while(it.hasNext()){
            Attribute attr = it.next();
            System.out.println(attr.getName()+"="+attr.getValue());
        }

    }

/*
     * 获取文本
     */
    @Test
    public void test5() throws Exception{
        //1.读取xml文档,返回Document对象
        SAXReader reader = new SAXReader();

        Document doc = reader.read(new File("XmlDemo.xml"));


        /*
         * 注意: 空格和换行也是xml的内容
         */
        String content = doc.getRootElement().getText();
        System.out.println(content);


        //获取文本(先获取标签,再获取标签上的文本)
        Element nameELem = 
            doc.getRootElement().element("book").element("title");
        //得到文本
        String text = nameELem.getText();
        System.out.println(text);

        //得到指定子标签名的文本内容
        String text2 = 
            doc.getRootElement().element("book").elementText("author");
        System.out.println(text2);

    }

常用方法:

            节点:
                Iterator  Element.nodeIterator();  
                //获取当前标签节点下的所有子节点

            标签:
                  Element  Document.getRootElement();  //获取xml文档的根标签        
                 Element   ELement.element("标签名") //指定名称的第一个子标签
                    List<Element>    Element.elements(); //获取所有子标签

            属性:
                String   Element.attributeValue("属性名") //获取指定名称的属性值
                 Attribute   Element.attribute("属性名");//获取指定名称的属性对象 
                        Attribute.getName()  //获取属性名称
                        Attibute.getValue()  //获取属性值
                    List<Attribute>  Element.attributes();  //获取所有属性对象
                    Iterator<Attribute> Element.attibuteIterator();
                     //获取所有属性对象

            文本:
                        Element.getText();  
                        //获取当前标签的文本获取当前标签的指定名称的子标签的文本内容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.hexiang.utils; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的节点 * @param attributeName 要取值的属性名称 * @return 要获取的属性的值 * @author HX_2010-01-12 */ public static String getAttribute( Element element, String attributeName ) { return element.getAttribute( attributeName ); } /** * 获取指定节点下的文本 * @param element 要获取文本的节点 * @return 指定节点下的文本 * @author HX_2010-01-12 */ public static String getText( Element element ) { return element.getFirstChild().getNodeValue(); } /** * 解析某个xml文件,并在内存中创建DOM树 * @param xmlFile 要解析XML文件 * @return 解析某个配置文件后的Document * @throws Exception xml文件不存在 */ public static Document parse( String xmlFile ) throws Exception { // 绑定XML文件,建造DOM树 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document domTree = db.parse( xmlFile ); return domTree; } /** * 获得某节点下的某个子节点(指定子节点名称,和某个属性的值) * 即获取parentElement下名字叫childName,并且属性attributeName的值为attributeValue的子结点 * @param parentElement 要获取子节点的那个父节点 * @param childName 要获取的子节点名称 * @param attributeName 要指定的属性名称 * @param attributeValue 要指定的属性的值 * @return 符合条件的子节点 * @throws Exception 子结点不存在或有多个符合条件的子节点 * @author HX_2008-12-01 */ public static Element getChildElement( Element parentElement, String childName, String attributeName, String attributeValue ) throws Exception { NodeList list = parentElement.getElementsByTagName( childName ); int count = 0; Element curElement = null; for ( int i = 0 ; i < list.getLength() ; i ++ ) { Element child = ( Element )list.item( i ); String value = child.getAttribute( attributeName ); if ( true == value.equals( attributeValue ) ) { curElement =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值