<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

    統計

    主站蜘蛛池模板: 在线免费观看伊人三级电影| 特级毛片爽www免费版| 日韩免费视频在线观看| 偷自拍亚洲视频在线观看99| 在线精品亚洲一区二区小说| 久久99精品视免费看| 亚洲免费网站观看视频| 久久99国产亚洲高清观看首页| 青娱分类视频精品免费2| 午夜亚洲国产精品福利| 婷婷久久久亚洲欧洲日产国码AV | 亚洲天堂久久精品| www.黄色免费网站| 亚洲一区二区三区AV无码| 免费成人激情视频| 一级做α爱过程免费视频| 久久精品国产亚洲AV久| 亚洲第一永久AV网站久久精品男人的天堂AV | 成人一a毛片免费视频| 国产精品偷伦视频观看免费| 亚洲人成电影网站免费| 久久亚洲精品无码| 又粗又大又长又爽免费视频| 18成禁人视频免费网站| 精品国产呦系列在线观看免费| 91亚洲国产成人久久精品网址| 中文字幕专区在线亚洲| 国产精品久久免费视频| 30岁的女人韩剧免费观看| 一级毛片人与动免费观看| 一本色道久久综合亚洲精品蜜桃冫| 亚洲精品美女久久久久99| 四虎永久精品免费观看| 一二三四免费观看在线视频中文版| 国产免费AV片在线观看| 一级做a爰性色毛片免费| 亚洲成在人线aⅴ免费毛片| 亚洲国产精品一区二区久| 亚洲AV成人精品网站在线播放| 国产精品亚洲mnbav网站| 国产免费av片在线播放|