xml操作2

来源:互联网 发布:windows远程桌面命令 编辑:程序博客网 时间:2024/05/22 01:46
 

package com.util;

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Document;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;

/**
 * 从xml文件中读取信息或是往xml文件中添加信息
 * 使用org.w3c.dom.Document对象操作XML文件
 *
 * @author yaotengjiao
 * @date 2011-8-5
 */
public class ReadInfoFromXML {
    /**
     * main测试方法
     *
     * @param args
     * @throws SAXException
     * @throws IOException
     * @throws ParserConfigurationException
     * @throws TransformerException
     */
    public static void main ( String[] args ) throws ParserConfigurationException, IOException, SAXException,
            TransformerException {
        readXMLUseDOM ();//读取xml文件内容
        writeXMLUseDOM ();//xml文件追加内容
    }
   
    /**
     * 从xml文件中读取信息
     * @throws ParserConfigurationException
     * @throws IOException
     * @throws SAXException
     * @throws SAXException
     * 步骤:1、获得要读取的XML文件
     *      2、创建Document对象
     *      3、获得节点遍历
     *
     */
    public static void readXMLUseDOM () throws ParserConfigurationException, IOException, SAXException {
        String xmlFilePath = "G:/测试文件.xml";
        Document doc = createDocument ( xmlFilePath );//创建Document对象
        Node firstNode = doc.getElementsByTagName ( "root" ).item ( 0 );//获得根节点
        readNode ( firstNode );//循环调用出子节点
    }
   
    /**
     * 递归调用
     *
     * @param node
     */
    public static void readNode ( Node node ) {
        NodeList childNodeList = node.getChildNodes ();
        for (int i = 0; i < childNodeList.getLength (); i++) {
            Node nd = childNodeList.item ( i );
            System.out.println ( "NodeName:" + nd.getNodeName () + "    NodeValue:" + nd.getNodeValue ()
                    + "  TextContent:" + nd.getTextContent () );
            readNode ( nd );
        }
    }
   
    /**
     * 往xml文件中添加信息
     * @throws ParserConfigurationException
     * @throws IOException
     * @throws SAXException
     * @throws TransformerException
     *
     * 步骤:1、创建Document对象
     *      2、创建Element对象
     *      3、为Element对象添加节点属性(若是要显示文本信息则要添加textNode节点对象)
     *      4、将创建好的Element对象添加到Document对象中
     *      5、创建DOMSource对象
     *      6、创建Transformer对象TransformerFactory对象.newInstance ()
     *      7、通过Transformer对象来修改文件
     *
     */
    public static void writeXMLUseDOM () throws ParserConfigurationException, SAXException, IOException,
            TransformerException {
        String xmlFilePath = "G:/测试文件.xml";
        //创建Document对象
        Document doc = createDocument ( xmlFilePath );
        //创建节点
        Text txt;
        //创建Element对象
        Element link = createElement ( doc, "link" );//两个参数为:Document对象,显示的tagName标签名称
        Attr attr = doc.createAttribute ( "属性1" );////添加属性(方式1)添加属性名称
        attr.setValue ( "利用方式1添加属性" );//添加属性的值
        link.setAttributeNode ( attr );//添加属性
        link.setAttribute ( "属性2", "利用方式2添加属性" );//创建TextNode信息,用于显示节点的内容
        Element linkText = createElement ( doc, "linkUrl" );
        txt = doc.createTextNode ( "text1" );//创建TextNode信息,用于显示节点的内容
        txt.setNodeValue ( "113456789" );
        linkText.appendChild ( txt );//节点追加
        link.appendChild ( linkText );
        doc.getDocumentElement ().appendChild ( link );
        //将创建的Element信息添加到Document对象当中,修改文件
        TransformerFactory tfactory = TransformerFactory.newInstance ();
        Transformer transformer = tfactory.newTransformer ();
        DOMSource source = new DOMSource ( doc );//数据源对象
        StreamResult result = new StreamResult ( new File ( xmlFilePath ) );//以流的方式将文件转换
        transformer.transform ( source, result );//将Document对象写入到文件中
    }
   
    /**
     * 创建element对象
     *
     * @param doc
     * @param tagName
     * @return
     */
    private static Element createElement ( Document doc, String tagName ) {
        return doc.createElement ( tagName );
    }
   
    /**
     * 创建Document对象
     *
     * @param filePath
     * @return
     * @throws ParserConfigurationException
     * @throws SAXException
     * @throws IOException
     */
    private static Document createDocument ( String filePath ) throws ParserConfigurationException, SAXException,
            IOException {
        File file = new File ( filePath );
        //创建一个解析工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
        DocumentBuilder builder = factory.newDocumentBuilder ();
        Document doc = builder.parse ( file );//Document对象是由文件对象转换而来的
        doc.normalize ();//清除掉XML文档中作为格式化内容输出的空白字符
        return doc;
    }
}