<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ?dom4j學習總結(二)

    (一)移除節點及屬性

    ???? /** 移除節點和屬性的操作
    ?????*?
    @throws ?DocumentException
    ?????
    */

    ????
    public ? void ?RemoveOperator()? throws ?DocumentException {
    ????????
    // 待生成xml的字符串
    ????????String?str = " <root><book?type='science'><Name>Java</Name><price>100</price></book> "
    ????????????
    + " <book?type='society'><Name>Society?security</Name><price>130</price></book> "
    ????????????
    + " <author><name>chb</name><sex>boy</sex></author></root> " ;
    ????????
    // 生成一個Document
    ????????Document?document? = ?DocumentHelper.parseText(str);
    ????????
    ????????Element?root
    = document.getRootElement();
    ????????
    // 刪除類型為society的book節點
    ????????Element?book_society = (Element)document.selectSingleNode( " //book[@type='society'] " );
    ????????root.remove(book_society);
    ????????System.out.println(
    " 1。正確的刪除了類型為society的book節點 " );
    ????????System.out.println(document.asXML());
    ????????
    ????????
    // 刪除sex節點
    ????????Element?sex = (Element)root.selectSingleNode( " //sex " );
    ????????
    ????????
    // 從root節點刪除
    ????????root.remove(sex);
    ????????System.out.println(
    " 2。這樣是不能刪除sex節點的 " );
    ????????System.out.println(document.asXML());
    ????????
    ????????
    // 從author節點刪除
    ????????root.element( " author " ).remove(sex);
    ????????System.out.println(
    " 3。這樣就可以正確刪除sex節點 " );
    ????????System.out.println(document.asXML());
    ????????
    ????????
    // 刪除屬性
    ????????Attribute?type = root.element( " book " ).attribute( " type " );
    ????????root.element(
    " book " ).remove(type);
    ????????System.out.println(
    " 4。正確刪除book節點的type屬性 " );
    ????????System.out.println(document.asXML());
    ????}

    輸出結果為:

    1。正確的刪除了類型為society的book節點
    <?xml version="1.0" encoding="UTF-8"?>
    <root><book type="science"><Name>Java</Name><price>100</price></book><author><name>chb</name><sex>boy</sex></author></root>
    2。這樣是不能刪除sex節點的
    <?xml version="1.0" encoding="UTF-8"?>
    <root><book type="science"><Name>Java</Name><price>100</price></book><author><name>chb</name><sex>boy</sex></author></root>
    3。這樣就可以正確刪除sex節點
    <?xml version="1.0" encoding="UTF-8"?>
    <root><book type="science"><Name>Java</Name><price>100</price></book><author><name>chb</name></author></root>
    4。正確刪除book節點的type屬性
    <?xml version="1.0" encoding="UTF-8"?>
    <root><book><Name>Java</Name><price>100</price></book><author><name>chb</name></author></root>

    分析:

    第二個輸出結果不能刪除sex節點,我們需要看dom4j的API

    remove

    public boolean remove(Element?element)
    Removes the given Element if the node is an immediate child of this branch. If the given node is not an immediate child of this branch then the Node.detach()method should be used instead.

    Parameters:
    element - is the element to be removed
    Returns:
    true if the element was removed

    從中我們可以看出,remove只能用在它自己的直接孩子節點上,不能用在孫子節點上,因為sex節點不是root節點的直接孩子節點,所以不能刪除;而sex節點卻是author節點的直接孩子節點,所以第三個輸出可以刪除。

    (二)將兩個Document合并為一個Document

    先看一個錯誤的情況

    (1)使用add()方法添加

    public ? void ?CombineDocument()? throws ?DocumentException {
    ????????
    // 待生成兩個Document的字符串
    ????????String?str_book = " <root><book?type='science'><Name>Java</Name><price>100</price></book> "
    ????????????
    + " <book?type='society'><Name>Society?security</Name><price>130</price></book> "
    ????????????
    + " </root> " ;
    ????????String?str_author
    = " <root><author><name>chb</name><sex>boy</sex></author></root> " ;
    ????????
    ????????
    // 生成兩個Document
    ????????Document?doc_book = DocumentHelper.parseText(str_book);
    ????????Document?doc_author
    = DocumentHelper.parseText(str_author);
    ????????
    ????????
    // 取出doc_author的author節點,添加到doc_book的根結點
    ????????Element?author = (Element)doc_author.selectSingleNode( " //author " );
    ????????doc_book.getRootElement().add(author);
    ????????System.out.println(doc_book.asXML());
    ????}

    調用CombineDocument函數,會出現以下錯誤:

    org.dom4j.IllegalAddException: The node "org.dom4j.tree.DefaultElement@17bd6a1 [Element: <author attributes: []/>]" could not be added to the element "root" because: The Node already has an existing parent of "root"
    ?at org.dom4j.tree.AbstractElement.addNode(AbstractElement.java:1521)
    ?at org.dom4j.tree.AbstractElement.add(AbstractElement.java:1002)
    ?at xml_chb.dom4j_chb.CombineDocument(dom4j_chb.java:189)
    ?at xml_chb.dom4j_chb.main(dom4j_chb.java:199)
    Exception in thread "main"

    即提示author節點已經有一個root節點了,不能再添加到另一個節點上去。

    (2)使用appendContent()方法

    即將doc_book.getRootElement().add(author);

    改為:doc_book.getRootElement().appendContent(author);

    輸出結果為:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    <book type="science"><Name>Java</Name><price>100</price></book>
    <book type="society"><Name>Society security</Name><price>130</price></book>
    <name>chb</name><sex>boy</sex>
    </root>

    可以看出,缺少了author節點,只是把author節點的子節點添加上去了,但是由此可見,appendContent方法是有希望的。

    我們看一下dom4j的API:

    appendContent

    public void appendContent(Branch?branch)
    Appends the content of the given branch to this branch instance. This method behaves like the Collection.addAll(java.util.Collection) method.

    Parameters:
    branch - is the branch whose content will be added to me.

    (3)使用正確的appendContent方法

    將:Element author=(Element)doc_author.selectSingleNode("http://author");

    doc_book.getRootElement().appendContent(author);

    改為:doc_book.getRootElement().appendContent(doc_author.getRootElement());

    輸出:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    <book type="science"><Name>Java</Name><price>100</price></book>
    <book type="society"><Name>Society security</Name><price>130</price></book>
    <author><name>chb</name><sex>boy</sex></author>
    </root>

    是正確結果

    (4)另一種可行的方法

    public ? void ?CombineDocument()? throws ?DocumentException {
    ????????
    // 待生成兩個Document的字符串
    ????????String?str_book = " <root><book?type='science'><Name>Java</Name><price>100</price></book> "
    ????????????
    + " <book?type='society'><Name>Society?security</Name><price>130</price></book> "
    ????????????
    + " </root> " ;
    ????????String?str_author
    = " <root><author><name>chb</name><sex>boy</sex></author></root> " ;
    ????????
    ????????
    // 生成兩個Document
    ????????Document?doc_book = DocumentHelper.parseText(str_book);
    ????????Document?doc_author
    = DocumentHelper.parseText(str_author);
    ????????
    ????????
    // 新生成一個Document
    ????????Element?author = DocumentHelper.createElement( " author " );
    ????????author.appendContent((Element)doc_author.selectSingleNode(
    " //author " ));
    ????????
    // 當前author尚無父節點,所以可以使用add方法添加
    ????????doc_book.getRootElement().add(author);

    ????????System.out.println(doc_book.asXML());
    ????}
    posted on 2006-09-24 23:41 揚州夢 閱讀(262) 評論(0)  編輯  收藏 所屬分類: java

    統計

    主站蜘蛛池模板: 免费看无码自慰一区二区| 18pao国产成视频永久免费| 精品免费国产一区二区三区| 亚洲熟妇无码久久精品| 四虎1515hh永久久免费| 亚洲国产理论片在线播放| 日本视频一区在线观看免费| 亚洲成a人不卡在线观看| 亚洲精品国产美女久久久| 国产精品内射视频免费| 成人午夜亚洲精品无码网站| 中文字幕版免费电影网站| 成年午夜视频免费观看视频| 亚洲色欲色欲www在线播放| 午夜成人免费视频| 美女尿口扒开图片免费| 亚洲男女内射在线播放| 成人性生交大片免费看中文| 亚洲AV无码久久精品狠狠爱浪潮| 香蕉免费一区二区三区| 亚洲欧洲中文日产| 午夜私人影院免费体验区| 污网站在线观看免费| 一本无码人妻在中文字幕免费| 精品亚洲国产成人| 四虎影视在线永久免费观看| 亚洲精品高清在线| 国产精品区免费视频| 久久久久se色偷偷亚洲精品av| 日本免费v片一二三区| 国产黄色免费观看| 亚洲综合久久成人69| 日韩免费毛片视频| 最近免费中文字幕MV在线视频3| 亚洲一级毛片免费看| 亚洲av麻豆aⅴ无码电影| 无码人妻一区二区三区免费n鬼沢| 亚洲综合偷自成人网第页色| 亚洲精品亚洲人成在线观看下载| 久久免费美女视频| 国产亚洲精品AAAA片APP|