熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

DOM、JDOM、DOM4J解析XML實例

2013-11-23 19:13:52  來源: Java核心技術 

  <?xml version= encoding=GB standalone=no?><學生花名冊>
        <學生 性別=>
            <姓名>李華</姓名>
            <年齡></年齡>
        </學生>
        <學生 性別=>
            <姓名>張三</姓名>
            <年齡></年齡>
        </學生>
        <學生 性別=>
            <姓名>王娟</姓名>
            <年齡></年齡>
        </學生>
    </學生花名冊>
    <?xml version= encoding=GB standalone=no?><學生花名冊>
    <學生 性別=>
    <姓名>李華</姓名>
    <年齡></年齡>
    </學生>
    <學生 性別=>
    <姓名>張三</姓名>
    <年齡></年齡>
    </學生>
    <學生 性別=>
    <姓名>王娟</姓名>
    <年齡></年齡>
    </學生>
    </學生花名冊>
    數據模型Studentjava
    [java] view plaincopyprint?
    package comupcgriddom;
   
    public class Student {
        private String name;
        private String sex;
        private int age;
   
        public String getName() {
            return name;
        }
   
        public void setName(String name) {
            thisname = name;
        }
   
        public String getSex() {
            return sex;
        }
   
        public void setSex(String sex) {
            thissex = sex;
        }
   
        public int getAge() {
            return age;
        }
   
        public void setAge(int age) {
            thisage = age;
        }
    }


    package comupcgriddom;
    public class Student {
    private String name;
    private String sex;
    private int age;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    thisname = name;
    }
    public String getSex() {
    return sex;
    }
    public void setSex(String sex) {
    thissex = sex;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    thisage = age;
    }
    }
    DOM方式解析xml文檔示例程序
    [java] view plaincopyprint?
    package comupcgriddom;
   
    import javaioFileOutputStream;
    import javaioIOException;
    import javaioOutputStreamWriter;
    import javautilVector;
   
    import javaxxmlparsersDocumentBuilder;
    import javaxxmlparsersDocumentBuilderFactory;
    import javaxxmlparsersParserConfigurationException;
    import javaxxmltransformOutputKeys;
    import javaxxmltransformTransformer;
    import javaxxmltransformTransformerException;
    import javaxxmltransformTransformerFactory;
    import javaxxmltransformdomDOMSource;
    import javaxxmltransformstreamStreamResult;
   
    import orgwcdomDocument;
    import orgwcdomElement;
    import orgwcdomNodeList;
    import orgwcdomText;
    import orgxmlsaxSAXException;
   
    /**
    *
    * @author shijin 原始DOM解析XML方式
    *
    */
    public class DOMTest {
        public static void main(String[] args) throws ParserConfigurationException
                SAXException IOException TransformerException {
            DOMTest test = new DOMTest()
            testdeleteElement(namexml
            Vector<Student> stus = testchangeXMLToModel(namexml
            for (Student stu : stus) {
                Systemoutprint(stugetName() + + stugetSex() +
                        + stugetAge() + \n
            }
            // 輸出
            // 李華 男
            // 張三 男
            testcreateDocument(namexml stus)
        }
   
        /**
         * show 根據vector中的student對象創建xml文檔
         *
         * @param filename
         *            要創建的文檔名
         * @throws ParserConfigurationException
         * @throws SAXException
         * @throws IOException
         * @throws TransformerException
         */
        public void createDocument(String filename Vector<Student> stus)
                throws ParserConfigurationException SAXException IOException
                TransformerException {
            // 得到DOM解析器的工廠實例
            DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance()
            // 從DOM工廠獲取DOM解析器
            DocumentBuilder builder = dbfnewDocumentBuilder()
            // 創建document對象
            Document doc = buildernewDocument()
            Element root = doccreateElement(學生花名冊// 創建根元素
            docappendChild(root)// 添加根元素
            for (Student stu : stus) {
                Element stuElement = doccreateElement(學生
                stuElementsetAttribute(性別 stugetSex())
                Element nameElement = doccreateElement(姓名
                Text nameText = doccreateTextNode(stugetName())
                nameElementappendChild(nameText)
                Element ageElement = doccreateElement(年齡
                Text ageText = doccreateTextNode(StringvalueOf(stugetAge()))
                ageElementappendChild(ageText)
                stuElementappendChild(nameElement)
                stuElementappendChild(ageElement)
                rootappendChild(stuElement)
            }
            FileOutputStream fos = new FileOutputStream(filename)
            OutputStreamWriter ow = new OutputStreamWriter(fos)
            // 保存xml文件
            DOMSource doms = new DOMSource(doc)
            // 創建結果輸出流
            StreamResult result = new StreamResult(ow)
            // 得到轉換工廠實例
            TransformerFactory transFac = TransformerFactorynewInstance()
            // 得到轉換器實例
            Transformer trans = transFacnewTransformer()
            // 轉化器設置輸出文檔的編碼方式
            transsetOutputProperty(OutputKeysENCODING GB
            //設置支持縮進
            transsetOutputProperty(OutputKeysINDENT yes
            // 將文檔源轉換到結果輸出流
            transtransform(doms result)
        }
   



        /**
         * show 讀取指定XML文檔並將其對象化
         *
         * @param filename
         * @return 存儲Student對象的vector
         * @throws ParserConfigurationException
         * @throws SAXException
         * @throws IOException
         */
        public Vector<Student> changeXMLToModel(String filename)
                throws ParserConfigurationException SAXException IOException {
            // 得到DOM解析器的工廠實例
            DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance()
            // 從DOM工廠獲取DOM解析器
            DocumentBuilder builder = dbfnewDocumentBuilder()
            // 解析xml文檔獲得document對象即DOM樹
            Document doc = builderparse(filename)
            // 獲取根節點
            Element root = docgetDocumentElement()
            // 獲取根節點的子節點中名字為學生的節點列表
            NodeList stuNodes = rootgetElementsByTagName(學生
            Vector<Student> students = new Vector<Student>()
            // 遍歷<學生>節點
            for (int i = ; i < stuNodesgetLength() i++) {
                // 獲取一個學生節點
                Element stuNode = (Element) em(i)
                // 創建一個學生對象
                Student stu = new Student()
                stusetSex(stuNodegetAttribute(性別))
                // 獲取<學生>節點的子節點中名字為姓名的節點列表
                NodeList nameNodes = stuNodegetElementsByTagName(姓名
                // 取得第一個姓名
                Element nameNode = (Element) em(
                stusetName(nameNodegetTextContent())
                // 獲取<學生>節點的子節點中名字為年齡的節點列表
                NodeList ageNodes = stuNodegetElementsByTagName(年齡
                // 取得第一個年齡
                Element ageNode = (Element) em(
                stusetAge(IntegerparseInt(ageNodegetTextContent()))
                studentsadd(stu)
            }
            return students;
        }
   
        /**
         * show 刪除指定名為filename的xml文檔中學生結點的性別屬性為tagname的結點
         *
         * @param filename
         * @param tagname
         * @throws ParserConfigurationException
         * @throws SAXException
         * @throws IOException
         * @throws TransformerException
         */
        public void deleteElement(String filename String tagname)
                throws ParserConfigurationException SAXException IOException
                TransformerException {
            // 得到DOM解析器的工廠實例
            DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance()
            // 從DOM工廠獲取DOM解析器
            DocumentBuilder builder = dbfnewDocumentBuilder()
            // 解析xml文檔獲得document對象即DOM樹
            Document doc = builderparse(filename)
            // 找到刪除節點
            NodeList stuNodes = docgetElementsByTagName(學生
            for (int i = ; i < stuNodesgetLength() i++) {
                Element stuElement = (Element) em(i)
                String sex = stuElementgetAttribute(性別
                if (sexequals(tagname)) {
                    stuElementgetParentNode()removeChild(stuElement)
                }
            }
            // 保存xml文件
            DOMSource doms = new DOMSource(doc)
            // 創建結果輸出流
            StreamResult result = new StreamResult(new FileOutputStream(filename))
            // 得到轉換工廠實例
            TransformerFactory transFac = TransformerFactorynewInstance()
            // 得到轉換器實例
            Transformer trans = transFacnewTransformer()
            // 轉化器設置輸出文檔的編碼方式
            transsetOutputProperty(OutputKeysENCODING GB
            // 將文檔源轉換到結果輸出流
            transtransform(doms result)
        }
    }



    package comupcgriddom;
    import javaioFileOutputStream;
    import javaioIOException;
    import javaioOutputStreamWriter;
    import javautilVector;
    import javaxxmlparsersDocumentBuilder;
    import javaxxmlparsersDocumentBuilderFactory;
    import javaxxmlparsersParserConfigurationException;
    import javaxxmltransformOutputKeys;
    import javaxxmltransformTransformer;
    import javaxxmltransformTransformerException;
    import javaxxmltransformTransformerFactory;
    import javaxxmltransformdomDOMSource;
    import javaxxmltransformstreamStreamResult;
    import orgwcdomDocument;
    import orgwcdomElement;
    import orgwcdomNodeList;
    import orgwcdomText;
    import orgxmlsaxSAXException;
    /**
    *
    * @author shijin 原始DOM解析XML方式
    *
    */
    public class DOMTest {
    public static void main(String[] args) throws ParserConfigurationException
    SAXException IOException TransformerException {
    DOMTest test = new DOMTest()
    testdeleteElement(namexml
    Vector<Student> stus = testchangeXMLToModel(namexml
    for (Student stu : stus) {
    Systemoutprint(stugetName() + + stugetSex() +
    + stugetAge() + \n
    }
    // 輸出
    // 李華 男
    // 張三 男
    testcreateDocument(namexml stus)
    }
    /**
    * show 根據vector中的student對象創建xml文檔
    *
    * @param filename
    *            要創建的文檔名
    * @throws ParserConfigurationException
    * @throws SAXException
    * @throws IOException
    * @throws TransformerException
    */
    public void createDocument(String filename Vector<Student> stus)
    throws ParserConfigurationException SAXException IOException
    TransformerException {
    // 得到DOM解析器的工廠實例
    DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance()
    // 從DOM工廠獲取DOM解析器
    DocumentBuilder builder = dbfnewDocumentBuilder()
    // 創建document對象
    Document doc = buildernewDocument()
    Element root = doccreateElement(學生花名冊// 創建根元素
    docappendChild(root)// 添加根元素
    for (Student stu : stus) {
    Element stuElement = doccreateElement(學生
    stuElementsetAttribute(性別 stugetSex())
    Element nameElement = doccreateElement(姓名
    Text nameText = doccreateTextNode(stugetName())
    nameElementappendChild(nameText)
    Element ageElement = doccreateElement(年齡
    Text ageText = doccreateTextNode(StringvalueOf(stugetAge()))
    ageElementappendChild(ageText)
    stuElementappendChild(nameElement)
    stuElementappendChild(ageElement)
    rootappendChild(stuElement)
    }
    FileOutputStream fos = new FileOutputStream(filename)
    OutputStreamWriter ow = new OutputStreamWriter(fos)
    // 保存xml文件
    DOMSource doms = new DOMSource(doc)
    // 創建結果輸出流
    StreamResult result = new StreamResult(ow)
    // 得到轉換工廠實例
    TransformerFactory transFac = TransformerFactorynewInstance()
    // 得到轉換器實例
    Transformer trans = transFacnewTransformer()
    // 轉化器設置輸出文檔的編碼方式
    transsetOutputProperty(OutputKeysENCODING GB
    //設置支持縮進
    transsetOutputProperty(OutputKeysINDENT yes
    // 將文檔源轉換到結果輸出流
    transtransform(doms result)
    }
    /**



    * show 讀取指定XML文檔並將其對象化
    *
    * @param filename
    * @return 存儲Student對象的vector
    * @throws ParserConfigurationException
    * @throws SAXException
    * @throws IOException
    */
    public Vector<Student> changeXMLToModel(String filename)
    throws ParserConfigurationException SAXException IOException {
    // 得到DOM解析器的工廠實例
    DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance()
    // 從DOM工廠獲取DOM解析器
    DocumentBuilder builder = dbfnewDocumentBuilder()
    // 解析xml文檔獲得document對象即DOM樹
    Document doc = builderparse(filename)
    // 獲取根節點
    Element root = docgetDocumentElement()
    // 獲取根節點的子節點中名字為學生的節點列表
    NodeList stuNodes = rootgetElementsByTagName(學生
    Vector<Student> students = new Vector<Student>()
    // 遍歷<學生>節點
    for (int i = ; i < stuNodesgetLength() i++) {
    // 獲取一個學生節點
    Element stuNode = (Element) em(i)
    // 創建一個學生對象
    Student stu = new Student()
    stusetSex(stuNodegetAttribute(性別))
    // 獲取<學生>節點的子節點中名字為姓名的節點列表
    NodeList nameNodes = stuNodegetElementsByTagName(姓名
    // 取得第一個姓名
    Element nameNode = (Element) em(
    stusetName(nameNodegetTextContent())
    // 獲取<學生>節點的子節點中名字為年齡的節點列表
    NodeList ageNodes = stuNodegetElementsByTagName(年齡
    // 取得第一個年齡
    Element ageNode = (Element) em(
    stusetAge(IntegerparseInt(ageNodegetTextContent()))
    studentsadd(stu)
    }
    return students;
    }
    /**
    * show 刪除指定名為filename的xml文檔中學生結點的性別屬性為tagname的結點
    *
    * @param filename
    * @param tagname
    * @throws ParserConfigurationException
    * @throws SAXException
    * @throws IOException
    * @throws TransformerException
    */
    public void deleteElement(String filename String tagname)
    throws ParserConfigurationException SAXException IOException
    TransformerException {
    // 得到DOM解析器的工廠實例
    DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance()
    // 從DOM工廠獲取DOM解析器
    DocumentBuilder builder = dbfnewDocumentBuilder()
    // 解析xml文檔獲得document對象即DOM樹
    Document doc = builderparse(filename)
    // 找到刪除節點
    NodeList stuNodes = docgetElementsByTagName(學生
    for (int i = ; i < stuNodesgetLength() i++) {
    Element stuElement = (Element) em(i)
    String sex = stuElementgetAttribute(性別
    if (sexequals(tagname)) {
    stuElementgetParentNode()removeChild(stuElement)
    }
    }
    // 保存xml文件
    DOMSource doms = new DOMSource(doc)
    // 創建結果輸出流
    StreamResult result = new StreamResult(new FileOutputStream(filename))
    // 得到轉換工廠實例
    TransformerFactory transFac = TransformerFactorynewInstance()
    // 得到轉換器實例
    Transformer trans = transFacnewTransformer()
    // 轉化器設置輸出文檔的編碼方式
    transsetOutputProperty(OutputKeysENCODING GB
    // 將文檔源轉換到結果輸出流
    transtransform(doms result)
    }
    }



    輸出
    李華 男
    張三 男
    結果namexml
    [java] view plaincopyprint?
    <?xml version= encoding=GB standalone=no?><學生花名冊>
        <學生 性別=>
            <姓名>李華</姓名>
            <年齡></年齡>
        </學生>
        <學生 性別=>
            <姓名>張三</姓名>
            <年齡></年齡>
        </學生>
   
    </學生花名冊>
    <?xml version= encoding=GB standalone=no?><學生花名冊>
    <學生 性別=>
    <姓名>李華</姓名>
    <年齡></年齡>
    </學生>
    <學生 性別=>
    <姓名>張三</姓名>
    <年齡></年齡>
    </學生>
    </學生花名冊>
    namexml
    [java] view plaincopyprint?
    <?xml version= encoding=GB standalone=no?>
    <學生花名冊>
    <學生 性別=>
    <姓名>李華</姓名>
    <年齡></年齡>
    </學生>
    <學生 性別=>
    <姓名>張三</姓名>
    <年齡></年齡>
    </學生>
    </學生花名冊>
    <?xml version= encoding=GB standalone=no?>
    <學生花名冊>
    <學生 性別=>
    <姓名>李華</姓名>
    <年齡></年齡>
    </學生>
    <學生 性別=>
    <姓名>張三</姓名>
    <年齡></年齡>
    </學生>
    </學生花名冊>



    二JDOM方式
    HDxml
    [html] view plaincopyprint?
    <?xml version= encoding=UTF?>
    <HD>
      <disk name=C>
        <capacity>G</capacity>
        <directories></directories>
        <files></files>
      </disk>
   
      <disk name=D>
        <capacity>G</capacity>
        <directories></directories>
        <files></files>
      </disk>
    </HD>
    <?xml version= encoding=UTF?>
    <HD>
    <disk name=C>
    <capacity>G</capacity>
    <directories></directories>
    <files></files>
    </disk>
    <disk name=D>
    <capacity>G</capacity>
    <directories></directories>
    <files></files>
    </disk>
    </HD>
    JDOM解析XML文檔示例
    [html] view plaincopyprint?
    package comupcgridjdom;
   
    import javaioIOException;
    import javautilList;
    import orgjdomDocument;
    import orgjdomElement;
    import orgjdomJDOMException;
    import orgjdominputSAXBuilder;
   
    public class JDOMTest {
        public static void main(String[] args) throws JDOMException IOException {
            // 獲得JDOM以SAX方式處理XML文檔的構造器
            SAXBuilder saxb = new SAXBuilder()
            // 通過SAX構造器獲得XML文檔對象
            Document doc = saxbbuild(JDOMTestclassgetClassLoader()
                    getResourceAsStream(testxml))
            // 獲取根元素HD
            Element root = docgetRootElement()
            // 取名字為disk的所有元素
            List<Element> list = rootgetChildren(disk
            for (int i = ; i < listsize() i++) {
                //取得第i個disk節點
                Element diskElement = (Element) listget(i)
                //取得disk屬性name
                String name = diskElementgetAttributeValue(name
                // 取disk子元素capacity的內容
                String capacity = diskElementgetChildText(capacity
                String directories = diskElementgetChildText(directories
                String files = diskElementgetChildText(files
                Systemoutprintln(磁盤信息
                Systemoutprintln(分區盤符 + name)
                Systemoutprintln(分區容量 + capacity)
                Systemoutprintln(目錄數 + directories)
                Systemoutprintln(文件數 + files)
                Systemoutprintln(
            }
        }
    }



    package comupcgridjdom;
    import javaioIOException;
    import javautilList;
    import orgjdomDocument;
    import orgjdomElement;
    import orgjdomJDOMException;
    import orgjdominputSAXBuilder;
    public class JDOMTest {
    public static void main(String[] args) throws JDOMException IOException {
    // 獲得JDOM以SAX方式處理XML文檔的構造器
    SAXBuilder saxb = new SAXBuilder()
    // 通過SAX構造器獲得XML文檔對象
    Document doc = saxbbuild(JDOMTestclassgetClassLoader()
    getResourceAsStream(testxml))
    // 獲取根元素HD
    Element root = docgetRootElement()
    // 取名字為disk的所有元素
    List<Element> list = rootgetChildren(disk
    for (int i = ; i < listsize() i++) {
    //取得第i個disk節點
    Element diskElement = (Element) listget(i)
    //取得disk屬性name
    String name = diskElementgetAttributeValue(name
    // 取disk子元素capacity的內容
    String capacity = diskElementgetChildText(capacity
    String directories = diskElementgetChildText(directories
    String files = diskElementgetChildText(files
    Systemoutprintln(磁盤信息
    Systemoutprintln(分區盤符 + name)
    Systemoutprintln(分區容量 + capacity)
    Systemoutprintln(目錄數 + directories)
    Systemoutprintln(文件數 + files)
    Systemoutprintln(
    }
    }
    }
    輸出結果
    磁盤信息
    分區盤符C
    分區容量G
    目錄數
    文件數
   
    磁盤信息
    分區盤符D
    分區容量G
    目錄數
    文件數
   



    三DOMJ方式
    Userhbmxml
    [html] view plaincopyprint?
    <?xml version= encoding=UTF?>
    <hibernatemapping>
        <class name=comupcgridUser table=t_user>
            <property name=username>aaa</property>
            <property name=password>bbb</property>
        </class》
    </hibernatemapping>
    <?xml version= encoding=UTF?>
    <hibernatemapping>
    <class name=comupcgridUser table=t_user>
    <property name=username>aaa</property>
    <property name=password>bbb</property>
    </class》
    </hibernatemapping>
    DOMJ解析XML示例
    [java] view plaincopyprint?
    package comupcgriddomj;
   
    import javaioFile;
    import javaioFileWriter;
    import javaioIOException;
    import javautilIterator;
    import javautilList;
   
    import orgdomjAttribute;
    import orgdomjDocument;
    import orgdomjDocumentException;
    import orgdomjDocumentHelper;
    import orgdomjElement;
    import orgdomjNode;
    import orgdomjioOutputFormat;
    import orgdomjioSAXReader;
    import orgdomjioXMLWriter;
   
    public class DOMJTest {
        public static void main(String[] args) {
            //獲得DOMJ以SAX方式處理XML文檔的管道
            SAXReader reader = new SAXReader()
            try {
                //通過管道獲得XML文檔對象
                Document document = readerread(new File(Userhbmxml))
                //獲取根節點
                Element root = documentgetRootElement()
                Systemoutprintln(rootgetName())
   
                Element element = null;
                //遍歷根節點下的節點
                for(Iterator<Element> i = rootelementIterator()ihasNext()){
                    //根節點的子節點
                    element = (Element) inext()
                    Systemoutprintln(elementgetName())
                    //遍歷節點屬性
                    for(Iterator<Attribute> j = elementattributeIterator()jhasNext()){
                        Attribute attr = (Attribute)jnext()
                        Systemoutprintln(attrgetName()+:+attrgetValue())
                    }
                    //遍歷名為property的節點
                    for(Iterator<Element> k = elementelementIterator(propertykhasNext()){
                        Element e = (Element)knext()
                        Systemoutprintln(egetData())
                    }
                }
   
                //通過Xpath的方式尋找節點
                List<Node> list = documentselectNodes(//hibernatemapping/class/property
                for(Node n: list){
                    String name = nvalueOf(@name
                    Systemoutprintln(ngetName()+ @name:+name)
                }
                //只拿第一個
                Node node = documentselectSingleNode(//hibernatemapping/class
                String name = nodevalueOf(@name
                String table = nodevalueOf(@table
                Systemoutprintln(nodegetName()+ @name:+name+@table:+table)
                createDocument()
            } catch (DocumentException e) {
                eprintStackTrace()
            }
        }
   
        public static Document createDocument(){
            //創建document對象
            Document document = DocumentHelpercreateDocument()
            Element root = documentaddElement(hibernatemapping
            //鏈式編程
            Element classElement = rootaddElement(class
                addAttribute(name comupcgridUser
                addAttribute(table t_user
            classElementaddElement(propertyaddAttribute(name usernameaddText(aaa
            classElementaddElement(PropertyaddAttribute(name passwordaddText(bbb
            try {
                FileWriter out = new FileWriter(Userhbmxml
                documentwrite(out)
                outflush()
                outclose()
            } catch (IOException e) {
                eprintStackTrace()
            }
            try {
                //設定美化格式
                OutputFormat format = OutputFormatcreatePrettyPrint()
                XMLWriter writer = new XMLWriter(new FileWriter(Userhbmxmlformat)
                writerwrite(document)
                writerclose()
                //縮減格式
            } catch (IOException e) {
                eprintStackTrace()
            }
            return document;
        }
    }



    package comupcgriddomj;
    import javaioFile;
    import javaioFileWriter;
    import javaioIOException;
    import javautilIterator;
    import javautilList;
    import orgdomjAttribute;
    import orgdomjDocument;
    import orgdomjDocumentException;
    import orgdomjDocumentHelper;
    import orgdomjElement;
    import orgdomjNode;
    import orgdomjioOutputFormat;
    import orgdomjioSAXReader;
    import orgdomjioXMLWriter;
    public class DOMJTest {
    public static void main(String[] args) {
    //獲得DOMJ以SAX方式處理XML文檔的管道
    SAXReader reader = new SAXReader()
    try {
    //通過管道獲得XML文檔對象
    Document document = readerread(new File(Userhbmxml))
    //獲取根節點
    Element root = documentgetRootElement()
    Systemoutprintln(rootgetName())
    Element element = null;
    //遍歷根節點下的節點
    for(Iterator<Element> i = rootelementIterator()ihasNext()){
    //根節點的子節點
    element = (Element) inext()
    Systemoutprintln(elementgetName())
    //遍歷節點屬性
    for(Iterator<Attribute> j = elementattributeIterator()jhasNext()){
    Attribute attr = (Attribute)jnext()
    Systemoutprintln(attrgetName()+:+attrgetValue())
    }
    //遍歷名為property的節點
    for(Iterator<Element> k = elementelementIterator(propertykhasNext()){
    Element e = (Element)knext()
    Systemoutprintln(egetData())
    }
    }
    //通過Xpath的方式尋找節點
    List<Node> list = documentselectNodes(//hibernatemapping/class/property
    for(Node n: list){
    String name = nvalueOf(@name
    Systemoutprintln(ngetName()+ @name:+name)
    }
    //只拿第一個
    Node node = documentselectSingleNode(//hibernatemapping/class
    String name = nodevalueOf(@name
    String table = nodevalueOf(@table
    Systemoutprintln(nodegetName()+ @name:+name+@table:+table)
    createDocument()
    } catch (DocumentException e) {
    eprintStackTrace()
    }
    }
    public static Document createDocument(){
    //創建document對象
    Document document = DocumentHelpercreateDocument()
    Element root = documentaddElement(hibernatemapping
    //鏈式編程
    Element classElement = rootaddElement(class
    addAttribute(name comupcgridUser
    addAttribute(table t_user
    classElementaddElement(propertyaddAttribute(name usernameaddText(aaa
    classElementaddElement(PropertyaddAttribute(name passwordaddText(bbb
    try {
    FileWriter out = new FileWriter(Userhbmxml
    documentwrite(out)
    outflush()
    outclose()
    } catch (IOException e) {
    eprintStackTrace()
    }
    try {
    //設定美化格式
    OutputFormat format = OutputFormatcreatePrettyPrint()
    XMLWriter writer = new XMLWriter(new FileWriter(Userhbmxmlformat)
    writerwrite(document)
    writerclose()
    //縮減格式
    } catch (IOException e) {
    eprintStackTrace()
    }
    return document;
    }
    }
    輸出
    hibernatemapping
    class
    name:comupcgridUser
    table:t_user
    aaa
    bbb
    property @name:username
    property @name:password
    class @name:comupcgridUser@table:t_user
    Userhbmxml
    [html] view plaincopyprint?
    <?xml version= encoding=UTF?>
    <hibernatemapping><class name=comupcgridUser table=t_user><property name=username>aaa</property><Property name=password>bbb</Property></class></hibernatemapping>
    <?xml version= encoding=UTF?>
    <hibernatemapping><class name=comupcgridUser table=t_user><property name=username>aaa</property><Property name=password>bbb</Property></class></hibernatemapping>
    Userhbmxml
    [html] view plaincopyprint?
    <?xml version= encoding=UTF?>
   
    <hibernatemapping>
      <class name=comupcgridUser table=t_user>
        <property name=username>aaa</property>
        <Property name=password>bbb</Property>
      </class>
    </hibernatemapping>


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26492.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.