JAVAコア知識点--Dom 4 jを使用してXMLを解析

9614 ワード

目次
一、Dom 4 j概要
二、ファイルのダウンロード
三、JavaでDom 4 jを使ってXMLを解析する
Documentオブジェクトの作成
アクションノードオブジェクト
アクションノードオブジェクトのプロパティ
XMLファイルへのDocumentオブジェクトの保存
文字列とXML変換
一、Dom 4 j概要
dom 4 jはJavaのXML APIで、jdomのアップグレード品で、XMLファイルを読み書きするために使われています.dom 4 jは非常に優れたJavaXML APIであり、性能が優れ、機能が強く、極めて使いやすいという特徴があり、sun社の公式dom技術を上回る性能を有し、オープンソースのソフトウェアでもあり、SourceForgeで見つけることができます.IBM developerWorksでは、主流のJava XML APIの性能、機能、使いやすさを評価する文章も見つけられるので、dom 4 jはどの面でも優れていることがわかります.今ではdom 4 jを使ってXMLを読み書きするJavaソフトが増えているのが見えますが、特にSunのJAXMもdom 4 jを使っています.これはすでにjarパッケージを使用する必要があります.Hibernateもプロファイルを読み書きします. 
二、ファイルのダウンロード
公式サイトのアドレス:http://www.dom4j.org/dom4j-1.6.1/  
三、JavaでDom 4 jを使ってXMLを解析する
Documentオブジェクトの作成
DOM 4 jでは、DocumentオブジェクトはXMLドキュメント全体を表し、その内部にXMLのデータ情報をDom 4 jツリーとして格納する.
Documentオブジェクトは、次の3つの方法で入手できます.
        //   XML  ,  document  
        SAXReader saxReader = new SAXReader();
        Document document1 = saxReader.read(new File("D:\\dom4j\\dom.xml"));

        //   XML      ,  document  .
        String xmlText = "1    ";
        Document document2 = DocumentHelper.parseText(xmlText);
        
        //    document  
        Document document3 =DocumentHelper.createDocument(DocumentHelper.createElement("root").addAttribute("id", "1"));
        System.out.println(document3.getRootElement().attributeValue("id")); //    :1

アクションノードオブジェクト
DOM 4 jでは、Dom 4 jツリー内の各ノードを表すためにElementオブジェクトが使用され、Elementオブジェクトには属性、テキストコンテンツ、ネーミングスペース、サブノードなどのコンテンツが含まれていてもよい.
「dom.xml」というXMLファイルの操作を例にとると、DOM 4 jノードの操作の一般的な方法を簡単に示します.この「dom.xml」の内容は以下の通りです.


1
     
E000

	TEST106608821
	TEST106608822
	TEST106608823



DOM 4 jのノードオブジェクトをJavaコードで操作し,その完全なコードは以下の通りである.
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class HelloDom4j
{

    @SuppressWarnings("unchecked")
    public static void main(String[] args) throws DocumentException, IOException
    {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("D:\\dom4j\\dom.xml");

        //   Document      
        Element root = document.getRootElement();
        System.out.println(root.getName());

        //        "assignIds"   
        Element assignIds = root.element("assignIds");
        System.out.println(assignIds.getName());

        //   "assignIds"       "assignId"    ,     
        List elements = assignIds.elements("assignId");
        Iterator it = elements.iterator();
        while (it.hasNext())
        {
            Element element = it.next();
            //          
            System.out.println(element.getText());
        }

        //  "assignIds"        "assignId"   
        Element element = assignIds.addElement("assignId");

        //           
        element.setText("TEST106608824");

        //   "assignIds"        "assignId"    
        Element firstAssingId = assignIds.element("assignId");
        assignIds.remove(firstAssingId);

        //     CDATA  
        Element cddataElement = root.addElement("content");
        cddataElement.addCDATA("  CDATA   !");

        //  Document       XML  
        XMLWriter xmlWriter = new XMLWriter(new OutputStreamWriter(new FileOutputStream("D:\\dom4j\\dom4j_dom.xml"), "UTF-8"));
        xmlWriter.write(document);
        xmlWriter.close();
    }

}

プログラムの実行が完了すると、コンピュータD:dom 4 jディレクトリの下に「dom 4 j_dom.xml」というXMLファイルが自動的に作成されます.その内容は次のとおりです.


1
     
E000

	TEST106608822
	TEST106608823
	TEST106608824



アクションノードオブジェクトのプロパティ
また,1つのXMLファイルの実際の動作を例に,DOM 4 jノードオブジェクトの属性動作の一般的な方法を簡単に例示する.コンピュータD:dom 4 jディレクトリの下に、次のような内容の「attribute.xml」というXMLファイルがあります.


	Hello Dom4j
	
		
	


DOM 4 jノードオブジェクトのプロパティはJavaコードで操作され、その完全なコードは以下の通りです.
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class HelloDom4j
{

    @SuppressWarnings("unchecked")
    public static void main(String[] args) throws DocumentException, IOException
    {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("D:\\dom4j\\attribute.xml");

        //      
        Element root = document.getRootElement();
        System.out.println(root.getName()); //     :Request

        //       "service"  
        Attribute attribute = root.attribute("service");

        //          
        System.out.println(attribute.getText()); //     :OrderSearchService
        System.out.println(attribute.getData()); //     :OrderSearchService
        System.out.println(attribute.getValue()); //     :OrderSearchService

        //       "lang"  
        Attribute lang = root.attribute("lang");
        System.out.println(lang.getData()); //     :zh-CN
        root.remove(attribute);

        //       "id"  ,     "request"
        root.addAttribute("id", "request");

        //   "Head"  
        Element head = root.element("Head");

        //   "Head"   "name"    "dom4j"
        Attribute nameAttr = head.attribute("name");
        System.out.println(nameAttr.getData());//     :head
        nameAttr.setValue("dom4j");
        System.out.println(nameAttr.getData());//     :dom4j

        //   "OrderSearch"  
        Element orderSearch = root.element("Body").element("OrderSearch");

        //   "OrderSearch"       
        Iterator it = orderSearch.attributeIterator();
        while (it.hasNext())
        {
            Attribute attr = it.next();
            System.out.println(attr.getText()); //     :orderSearch 2019586321
        }

        //  Document       XML  
        XMLWriter xmlWriter = new XMLWriter(new FileWriter("D:\\dom4j\\dom4j_attribute.xml"));
        xmlWriter.write(document);
        xmlWriter.close();

    }

}

プログラムの実行が完了すると、コンピュータD:dom 4 jディレクトリの下に「dom 4 j_attribute.xml」というXMLファイルが自動的に作成されます.その内容は次のとおりです.


	Hello Dom4j
	
		
	


XMLファイルへのDocumentオブジェクトの保存
//          
        XMLWriter xmlWriter = new XMLWriter(new FileWriter("D:\\dom4j\\dom4j_attribute.xml"));
        xmlWriter.write(document);
        xmlWriter.close();

//          
        OutputFormat format=OutputFormat.createPrettyPrint(); //createPrettyPrint()    ,createCompactFormat()    
        format.setEncoding("UTF-8");

        XMLWriter xmlWriter = new XMLWriter(new FileWriter("D:\\dom4j\\dom4j_attribute.xml"),format);
        xmlWriter.write(document);
        xmlWriter.close();

文字列とXML変換
前例の「attribute.xml」ファイルを例に、変換の例を続けます.
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class HelloDom4j
{

    public static void main(String[] args) throws DocumentException
    {
        //  XML      
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("D:\\dom4j\\attribute.xml");

        String documentStr = document.asXML();
        System.out.println(documentStr);
        /*
         *     :
         * 
         * 
         * Hello Dom4j
         * 
         *      
         * 
         * 
         */

        Element root = document.getRootElement();

        String rootStr = root.asXML();
        System.out.println(rootStr);
        /*
         *     :
         * 
         * Hello Dom4j
         * 
         *      
         * 
         * 
         */

        //        XML
        String xmlStr = "Hello Dom4j";
        Document xmlDoc = DocumentHelper.parseText(xmlStr);
    }

}