java中XML操作:xml与string互转读取XML文档节点及对XML节点增删改查

Posted 古兰精

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中XML操作:xml与string互转读取XML文档节点及对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即可构建到项目中去了。导入成功如图所示:

 

以上是关于java中XML操作:xml与string互转读取XML文档节点及对XML节点增删改查的主要内容,如果未能解决你的问题,请参考以下文章

JAXB完毕XML与Java对象的互转

JAVA bean与XML互转的利器---XStream

JSONUtil(JAVA对象/List与json互转,xml与json互转)

JSONUtil(JAVA对象/List与json互转,xml与json互转)

Java对象与XML报文互转

Linq操作XML生成XML,实体生成XML和互转