ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

xml相关操作

2021-07-15 08:00:46  阅读:226  来源: 互联网

标签:xml dom4j org Element 相关 import 操作 节点


一、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即可构建到项目中去了。导入成功如图所示:

标签:xml,dom4j,org,Element,相关,import,操作,节点
来源: https://www.cnblogs.com/kcwang/p/15013732.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有