(一)創(chuàng)建Document的基本操作
/**
? * xml基本操作
? */
?public void BaseOperation(){
??//創(chuàng)建一個(gè)document
??Document document=DocumentHelper.createDocument();
??//創(chuàng)建根結(jié)點(diǎn)
??Element root=document.addElement("root");
??//為根結(jié)點(diǎn)添加一個(gè)book節(jié)點(diǎn)
??Element book1=root.addElement("book");
??//為book1添加屬性type
??book1.addAttribute("type","science");
??//為book1添加name子節(jié)點(diǎn)
??Element name1=book1.addElement("Name");
??//并設(shè)置其name為"Java"
??name1.setText("Java");
??//為book1創(chuàng)建一個(gè)price節(jié)點(diǎn),并設(shè)其價(jià)格為100
??book1.addElement("price").setText("100");
??
??//為根結(jié)點(diǎn)添加第二個(gè)book節(jié)點(diǎn),并設(shè)置該book節(jié)點(diǎn)的type屬性
??Element book2=root.addElement("book").addAttribute("type","science");
??//為book1添加name子節(jié)點(diǎn)
??Element name2=book2.addElement("Name");
??//并設(shè)置其name為"Oracle"
??name2.setText("Oracle");
??//為book1創(chuàng)建一個(gè)price節(jié)點(diǎn),并設(shè)其價(jià)格為200
??book2.addElement("price").setText("200");
??
??//輸出xml
??System.out.println(document.asXML());
?}
調(diào)用BaseOperation,輸出結(jié)果為:
<?xml version="1.0" encoding="UTF-8"?>
<root>
?<book type="science">
??<Name>Java</Name>
??<price>100</price>
?</book>
?<book type="science">
??<Name>Oracle</Name>
??<price>200</price>
?</book>
</root>
(二)根據(jù)一個(gè)符合Document格式的字符串來生成一個(gè)Document
?/**將字符串轉(zhuǎn)化為Document
? * @param str? 輸入的字符串
? * @return? 生成的document
? * @throws DocumentException
? */
?public Document parserStrtoDocument(String str) throws DocumentException{
??Document document=DocumentHelper.parseText(str);
??return document;
?}
調(diào)用示例:
String str="<root><book type='science'><Name>Java</Name><price>100</price></book></root>";
??Document document = parserStrtoDocument(str);
??System.out.println(document.asXML());
輸出結(jié)果為:
<?xml version="1.0" encoding="UTF-8"?>
<root>
?<book type="science">
??<Name>Java</Name>
??<price>100</price>
?</book>
</root>
(三)取得xml節(jié)點(diǎn)屬性的基本方法
?/**
? * 取得xml的節(jié)點(diǎn)和屬性的值
? * @throws DocumentException
? */
?public void getBaseInfofromDocument() throws DocumentException{
??String str="<root><book type='science'><Name>Java</Name><price>100</price></book></root>";
??//生成一個(gè)Document
??Document document = DocumentHelper.parseText(str);
??//取得根結(jié)點(diǎn)
??Element root=document.getRootElement();
??//取得book節(jié)點(diǎn)
??Element book=root.element("book");
??//取得book節(jié)點(diǎn)的type屬性的值
??String type=book.attributeValue("type");
??//取得Name節(jié)點(diǎn)
??Element name=book.element("Name");
??//取得書名
??String bookname=name.getText();
??//取得書的價(jià)錢
??int price=Integer.parseInt(book.element("price").getText());
??
??//輸出書目信息
??System.out.println("書名:"+bookname);
??System.out.println("所屬類別:"+type);
??System.out.println("價(jià)格:"+price);
?}
調(diào)用getBaseInfofromDocument,輸出結(jié)果為:
書名:Java
所屬類別:science
價(jià)格:100
(四)利用迭代,xpath取得節(jié)點(diǎn)及其屬性值
?/**利用迭代,xpath取得xml的節(jié)點(diǎn)及其屬性值
? * @throws DocumentException
? */
?public void getComplexInfofromDocument() throws DocumentException{
??String str="<root><book type='science'><Name>Java</Name><price>100</price></book>"
???+"<book type='science'><Name>Oracle</Name><price>120</price></book>"
???+"<book type='society'><Name>Society security</Name><price>130</price></book>"
???+"<author><name>chb</name></author></root>";
??//生成一個(gè)Document
??Document document = DocumentHelper.parseText(str);
??
??//提取類型為"society"的書
??//此處需要添加支持xpath的jar包,詳細(xì)見備注
??Element society_book=(Element)document.selectSingleNode("/root/book[@type='society']");
??System.out.println(society_book.asXML());
??
??//提取價(jià)格節(jié)點(diǎn)的列表
??System.out.println("-----------價(jià)格列表-------------");
??List price=document.selectNodes("http://price");
??for(int i=0;i<price.size();i++){
???Element elem_price=(Element)price.get(i);
???System.out.println(elem_price.getText());
??}
??
??//循環(huán)根結(jié)點(diǎn)下的所有節(jié)點(diǎn),若當(dāng)前節(jié)點(diǎn)為book,則輸出這本書的詳細(xì)信息
??System.out.println("-------------書目詳情------------");
??System.out.println("書名\t\t類別\t\t價(jià)格");
??Element root=document.getRootElement();
??Iterator iterator=root.elementIterator();
??while(iterator.hasNext()){
???Element element=(Element)iterator.next();
???if(element.getName().equals("book")){
????System.out.print(element.element("Name").getText()+"\t");
????System.out.print(element.attributeValue("type")+"\t\t");
????System.out.print(element.element("price").getText()+"\n");
???}
??}
??//查找作者姓名
??Element author=(Element)document.selectSingleNode("http://author");
??System.out.println("---------"+author.element("name").getText()+"----------");
??//提取作者的所有書目名稱
??Iterator iterator_book=root.elementIterator("book");??
??while(iterator_book.hasNext()){
???Element book=(Element)iterator_book.next();
???System.out.print(book.element("Name").getText()+"\t");
??}
??
??//屬性迭代
??System.out.println("\n-------屬性迭代--------");
??String str1="<book type='science' name='Java' price='100'/>";
??Document document1=DocumentHelper.parseText(str1);
??//開始迭代
??Iterator iterator_attribute=document1.getRootElement().attributeIterator();
??while(iterator_attribute.hasNext()){
???//提取當(dāng)前屬性
???Attribute attribute=(Attribute)iterator_attribute.next();
???System.out.println(attribute.getName()+":"+attribute.getValue());
??}
?}
調(diào)用getComplexInfofromDocument,輸出結(jié)果為:
<book type="society"><Name>Society security</Name><price>130</price></book>
-----------價(jià)格列表-------------
100
120
130
-------------書目詳情------------
書名??類別??價(jià)格
Java?science??100
Oracle?science??120
Society security?society??130
---------chb----------
Java?Oracle?Society security?
-------屬性迭代--------
type:science
name:Java
price:100
備注:調(diào)用該方法之前,應(yīng)該先向工程中添加支持xpath的jar包,否則,會(huì)出現(xiàn)以下錯(cuò)誤:
java.lang.NoClassDefFoundError: org/jaxen/JaxenException
?at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
?at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
?at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
?at xml_chb.dom4j_chb.getComplexInfofromDocument(dom4j_chb.java:82)
?at xml_chb.dom4j_chb.main(dom4j_chb.java:92)
Exception in thread "main"
只需要引入jaxen包就行了,我使用的是hibernate包中的jaxen-1.1-beta-7.jar包。
只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關(guān)文章:
|
||