zoukankan      html  css  js  c++  java
  • 解析xml获取标签中数据等方法

    一、XML和String互转:

      使用dom4j程式变得很简单

    复制代码
    //字符串转XML
    String xmlStr = "......";    
    Document document = DocumentHelper.parseText(xmlStr);    
    
    // XML转字符串    
    Document document = ...;    
    String text = document.asXML();    
    //这里的XML DOCUMENT为org.dom4j.Document  
    复制代码

    二、读取XML文档节点:

    复制代码
    package vastsum;
    
    import java.io.File;
    import java.util.Iterator;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.SAXReader;
    
    /**
     * 读取下xml文档,获得document对象。
     */
    class exmple {
        public static void main(String[] args) throws DocumentException
        {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("./src/contact.xml"));
            
            /**
             * 节点对象的操作方法
             */
            
            //获取文档根节点
            Element root = document.getRootElement();
            //输出根标签的名字
            System.out.println(root.getName());
            
            //获取根节点下面的所有子节点(不包过子节点的子节点)
            List<Element> list = root.elements() ;
            //遍历List的方法
            for (Element e:list){
                System.out.println(e.getName());
            }
            
            //获得指定节点下面的子节点
            Element contactElem = root.element("contact");//首先要知道自己要操作的节点。 
            List<Element> contactList = contactElem.elements();
            for (Element e:contactList){
                System.out.println(e.getName());
            }    
            
            //调用下面获取子节点的递归函数。
            getChildNodes(root);
            
            //获得当前标签下指定名称的第一个子标签
            Element conElem = root.element("contact");
            System.out.println(conElem.getName());
            
            //获得更深层次的标签(一层一层的获取)
            Element nameElem = root.element("contact").element("name");
            System.out.println(nameElem.getName());
        }
        
        //递归查询节点函数,输出节点名称
        private static void  getChildNodes(Element elem){
            System.out.println(elem.getName());
            Iterator<Node> it = elem.nodeIterator();
            while (it.hasNext()){
                Node node = it.next();
                if (node instanceof Element){
                    Element e1 = (Element)node;
                    getChildNodes(e1);
                }
            }
        }   
    }
    复制代码

    三、对XML节点属性进行增删改查

    复制代码
    package vastsum;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.util.Iterator;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    import org.junit.Test;
    
    /**
     * 使用dom4j操作xml
     * 对xml属性操作
     * 操作xml文件为contact.xml
     *
     */
    public class attrDemo{
        @Test
        public void exmple() throws Exception{
            //读取XML文件,获得document对象
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("./src/contact.xml"));
            
            //获得某个节点的属性对象
            Element rootElem = document.getRootElement();
            //获取根节点属性对象
            Attribute rootAttr = rootElem.attribute("id");    
            
            //获取指定节点属性对象
            Element contactElem = rootElem.element("contact");
            Attribute contactAttr = contactElem.attribute("id");
    
            //获取指定对象的属性名
            System.out.println(rootAttr.getName());
            System.out.println(contactAttr.getName());
            
            //获取指定对象的属性值
            System.out.println(contactAttr.getValue());
            System.out.println(rootAttr.getValue());
            
            //遍历某个节点的所有属性
            for (Iterator it = contactElem.attributeIterator();it.hasNext();){
                Attribute  conAttr= (Attribute)it.next();
                String conTxt = conAttr.getValue();
                String conAttrName = conAttr.getName();
                System.out.println(conAttrName+" = "+conTxt);
            }
    
            //设置某节点的属性和值
            contactElem.addAttribute("name", "zhangsan");
            
            //设置(更改)某属性的值
            Attribute nameAttr = contactElem.attribute("name");
            nameAttr.setValue("lisi");
            
            //删除某节点的指定属性
            contactElem.remove(nameAttr);
    
            //将某节点的属性和值写入xml文档中
            XMLWriter writer = new XMLWriter(new FileWriter("./src/contact.xml"));
            writer.write(document);
            writer.close();
            
            //如果文档中有中文需要设置字符编码,用如下语句:
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("GBK");
            XMLWriter writer = new XMLWriter(new FileWriter("./src/contact.xml"),format);
        }
    }
    复制代码

    下面介绍下dom4j:

      dom4j是Java的XML API,用来读写XML文件的。目前有很多场景中使用dom4j来读写xml的。

      要使用dom4j开发,需要下载导入dom4j相应的jar文件。官网下载:http://www.dom4j.org/dom4j-1.6.1/

      下载解压之后如图所示:

      我们只需要把dom4j-1.6.1.jar文件构建到我们开发项目中就可以了。

      在项目中创建一个lib文件,把dom4j-1.6.1.jar文件拷贝到lib中,然后右键dom4j-1.6.1jar文件。如图所示:


      点击Add to Bulid Path即可构建到项目中去了。导入成功如图所示:

  • 相关阅读:
    [最新]制作u盘引导安装ubuntu11.04
    js记录
    下面的代码有什么不妥之处
    Oracle常用命令
    蓝天下,献给你,html5
    无意义的小东西
    sql中,把varchar类型转换为int型,然后进行排序
    身边的人,来来去去
    不一定能写出来的求素数问题
    写在第一百篇博客之际
  • 原文地址:https://www.cnblogs.com/kcwang/p/15013732.html
Copyright © 2011-2022 走看看