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 list = root.elements() ;
        //遍历List的方法
        for (Element e:list){
            System.out.println(e.getName());
        }
        
        //获得指定节点下面的子节点
        Element contactElem = root.element("contact");//首先要知道自己要操作的节点。 
        List 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 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);
    }
}

你可能感兴趣的:(java,递归查询,java,xml,json)