posts - 165, comments - 198, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          dom4j 學(xué)習(xí)

          Posted on 2007-11-06 15:24 G_G 閱讀(2099) 評(píng)論(3)  編輯  收藏 所屬分類: xml Related
          直接看代碼..
          dom4j 的一般使用都在里面了
          /lib/dom4j-1.6.1.jar
          /lib/jaxen-1.1-beta-6.jar
          package?useDom4j.test.supper;

          import?java.io.File;
          import?java.io.FileOutputStream;
          import?java.io.IOException;
          import?java.io.InputStream;
          import?java.io.OutputStream;
          import?java.net.URL;
          import?java.util.Iterator;
          import?java.util.List;
          import?java.util.regex.Matcher;
          import?java.util.regex.Pattern;

          import?javax.xml.parsers.DocumentBuilder;
          import?javax.xml.parsers.DocumentBuilderFactory;

          import?junit.framework.TestCase;

          import?org.dom4j.Document;
          import?org.dom4j.DocumentFactory;
          import?org.dom4j.DocumentHelper;
          import?org.dom4j.Element;
          import?org.dom4j.Node;
          import?org.dom4j.QName;
          import?org.dom4j.Visitor;
          import?org.dom4j.VisitorSupport;
          import?org.dom4j.XPath;
          import?org.dom4j.io.DOMReader;
          import?org.dom4j.io.HTMLWriter;
          import?org.dom4j.io.OutputFormat;
          import?org.dom4j.io.SAXReader;
          import?org.dom4j.io.XMLWriter;


          public?class?useDom4jTest?extends?TestCase?{

          ????
          //use?all
          ????private?String?path?;
          ????
          private?ClassLoader?clo;
          ????
          //?file?path?->?bin?
          ????private?String?classPath?;
          ????
          //use?save?
          ????static?private?Document?doc;
          ????
          private?String?filese;

          ????
          protected?void?setUp()?throws?Exception?{
          ????????
          super.setUp();
          ????????path?
          =?"useDom4j/test/config/test.xml";
          ????????clo?
          =?this.getClass().getClassLoader();
          ????????classPath?
          =?System.getProperty("java.class.path").split(";")[0]???;
          ????????filese?
          =?System.getProperty("file.separator");
          ????}

          ????
          protected?void?tearDown()?throws?Exception?{
          ????????
          super.tearDown();
          ????}

          ????
          ????
          public?void?testRead()throws?Exception{
          ????????SAXReader?sax?
          =?new?SAXReader();
          ????????
          //File?read
          ????????Document?docF?=??sax.read(
          ????????????????
          new?File(clo.getResource(path).getFile())
          ????????????????????);
          ????????assertNotNull(
          "is?File?saxReader?err",docF);
          ????????
          ????????
          //InPutStream?read?
          ????????Document?docI?=?sax.read(?clo.getResourceAsStream(path)?);
          ????????assertNotNull(
          "is?InPutStream?saxReader?err",docI);
          ????????
          ????????
          //URL?read?
          ????????Document?docU?=?sax.read(?clo.getResource(path)?);
          ????????assertNotNull(
          "is?Url?saxReader?err",docU);
          ????????
          ????}
          ????
          ????
          /**?converts?a?W3C?DOM?document?into?a?dom4j?document?*/
          ????
          public?void?testConversion()?throws?Exception{
          ??????????DocumentBuilderFactory?domfac
          =DocumentBuilderFactory.newInstance();
          ??????????DocumentBuilder?dombuilder
          =domfac.newDocumentBuilder();
          ??????????InputStream?input?
          =??clo.getResourceAsStream(path)?;
          ??????????org.w3c.dom.Document?doc3c?
          =?dombuilder.parse(?input?);
          ??????????DOMReader?xmlReader?
          =?new?DOMReader();
          ??????????assertEquals(?
          "?Conversion?:?W3C?DOM->?dom4j?DOM?err",
          ??????????????????xmlReader.read(doc3c)?
          instanceof?Document,true?);
          ??????}
          ??????
          ????
          public?void?testCreate()throws?Exception{
          ??????????DocumentFactory?factory?
          =?DocumentFactory.getInstance();
          ??????????doc?
          =?factory.createDocument();
          ????????
          //root?Create
          ??????????Element?root?=?doc.addElement("testElement");
          ??????????assertNotNull(
          "is?root?Create?err",root);
          ??????????
          ???????????Element?author2?
          =?root.addElement(?"author"?)
          ??????????????.addAttribute(?
          "name",?"Toby"?)
          ??????????????.addAttribute(?
          "location",?"Germany"?)
          ??????????????.addText(?
          "Tobias?Rademacher"?);

          ????????????Element?author1?
          =?root.addElement(?"author"?)
          ??????????????.addAttribute(?
          "name",?"James"?)
          ??????????????.addAttribute(?
          "location",?"UK"?)
          ??????????????.addText(?
          "James?Strachan"?);
          ????????????
          ????????????
          //Test?Create?
          ????????????
          //use?XPath?->jaxen-xxx.jar??
          ????????????assertEquals("create?Element?author2?err",
          ????????????????????doc.selectSingleNode(
          "/testElement/author[@name='Toby']").getText()
          ????????????????????,
          "Tobias?Rademacher");
          ????????????assertEquals(
          "create?Element?author1?err",
          ????????????????????doc.selectSingleNode(
          "/testElement/author[@location='UK']/@name").getText()
          ????????????????????,
          "James");
          ????}



          ?????
          public?void?testPrintingHTML()throws?Exception{
          ???????????String?testSaveXml?
          =?"useDom4j/test/config/testHtml.html";
          ???????????
          ???????????testSaveXml?
          =?classPath+filese+testSaveXml;
          ??????????
          ???????????File?file?
          =?getFile(testSaveXml);
          ???????????
          //Save?file.html?
          ???????????HTMLWriter?writer?=?new?HTMLWriter(new?FileOutputStream(?file?));
          ???????????writer.write(
          new?SAXReader().read(?clo.getResource(path)?));
          ???????????writer.flush();
          ?????}
          ????
          ????
          public?void?testIterator(){
          ????????Element?root?
          =?this.doc.getRootElement();
          ????????
          ????????
          //Iterator
          ????????Iterator?elementIterator?=?root.elementIterator();
          ????????
          while(elementIterator.hasNext()){
          ??????????Element?element?
          =?(Element)elementIterator.next();
          ??????????assertNotNull(
          "not?attr?name",?element.selectSingleNode("./@name")?);
          ??????????assertNotNull(
          "not?attr?location",?element.selectSingleNode("./@location")?);
          ??????????assertNotNull(
          "not?Text?",?element.selectSingleNode(".").getText()?);
          ????????}
          ????????
          ????????
          //for?->?./XX
          ????????for?(?int?i?=?0,?size?=?root.nodeCount();?i?<?size;?i++?)?{
          ????????????Node?node?
          =?root.node(i);
          ????????????
          if?(?node?instanceof?Element?)?{
          ??????????????Element?element?
          =?(Element)node;
          ??????????????assertNotNull(
          "not?attr?name",?element.selectSingleNode("./@name")?);
          ????????????????assertNotNull(
          "not?attr?location",?element.selectSingleNode("./@location")?);
          ????????????????assertNotNull(
          "not?Text?",?element.selectSingleNode(".").getText()?);
          ????????????}
          ????????}
          ????????
          ????????
          //List?
          ????????List?elements?=?root.elements();
          ????????
          int?size?=?elements.size()?;
          ????????
          if?(?size?>?4?)?{
          ??????????elements.subList(?
          3,?4?).clear();
          ??????????assertEquals(
          "List?is?not?clear",size-elements.size()==1,true);
          ????????}

          ????}
          ????
          ????
          /**?use?test.xml?test
          ?????????xpath?->?/project/organization/
          ?????????<organization>
          ?????????????<name>MetaStuff?Ltd.</name>
          ?????????????<url>
          http://sourceforge.net/projects/dom4j</url>
          ?????????????<logo>
          http://sourceforge.net/sflogo.php?group_id=16035</logo>
          ??????????</organization>?
          ??????????
          ??????????xpath?->?/project/dependencies/dependency[groupId='msv']
          ????????????<dependency>
          ??????????????<groupId>msv</groupId>
          ??????????????<artifactId>xsdlib</artifactId>
          ??????????????<version>20030807</version>
          ??????????????<url>
          https://msv.dev.java.net/</url>
          ????????????</dependency>
          ????
          */
          ????
          public?void?testXpath()throws?Exception{
          ????????XPath?xpathSelector?
          =?DocumentHelper.createXPath("/project/organization/*");
          ????????Document?docT?
          =?new?SAXReader().read(?clo.getResourceAsStream(path)?);
          ????????List?results?
          =?xpathSelector.selectNodes(docT);
          ????????
          for?(?Iterator?iter?=?results.iterator();?iter.hasNext();?)?{
          ??????????Element?element?
          =?(Element)?iter.next();
          ??????????
          if(element.getName().equals("name")){
          ??????????????assertEquals(
          "name?err",?element.getText().equals("MetaStuff?Ltd."),true);
          ??????????}
          ??????????
          if(element.getName().equals("url")){
          ??????????????assertEquals(
          "url?err",?element.getText().equals("http://sourceforge.net/projects/dom4j"),true);
          ??????????}
          ??????????
          if(element.getName().equals("logo")){
          ??????????????assertEquals(
          "logo?err",?element.getText().equals("http://sourceforge.net/sflogo.php?group_id=16035"),true);
          ??????????}
          ????????}
          ????????
          ????????
          //?select?
          ????????String?url?=?docT.valueOf(?"/project/dependencies/dependency[groupId='msv']/url"?);
          ????????assertEquals(
          "Url?err",?url.equals("https://msv.dev.java.net/"),true);
          ????????Number?count?
          =?docT.numberValueOf(?"/project/dependencies/dependency[groupId='msv']/version"?);
          ????????assertEquals(
          "Url?err",?count.intValue()==20030807,true);
          ????????
          ????}

          ????
          ????
          public?void?testVisitor(){
          ????????Visitor?visitor?
          =?new?VisitorSupport()?{
          ????????????
          public?void?visit(Element?element)?{
          ??????????????System.out.println(
          ????????????????
          "Entity?name:?"?+?element.getName()??+?"?text?:"?+?element.getText()
          ??????????????);
          ????????????}
          ??????????};

          ??????????doc.accept(?visitor?);
          ????}

          ????
          //??element.clone?;??element.createCopy?;???
          ????public?void?testInsertElementAt()?throws?Exception{
          ????????Element?root?
          =?this.doc.getRootElement();
          ????????Element?oldElement?
          =?(Element)doc.selectSingleNode("/testElement/author[@name='Toby']");
          ????????Element?newElement?
          =?(Element)?oldElement.clone();
          ????????List?list?
          =?root.content();
          ????????list.add(?root.indexOf(oldElement)
          +1,newElement?);

          ?????}
          ????
          ????
          ????
          ????
          ?????
          public?void?testSave()throws?Exception{
          ???????????String?testSaveXml?
          =?"useDom4j/test/config/testSave.xml";
          ???????????
          ???????????testSaveXml?
          =?classPath+filese+testSaveXml;
          ??????????
          ???????????File?file?
          =?getFile(testSaveXml);
          ???????????
          //Save?file.xml?
          ???????????XMLWriter?writer?=?new?XMLWriter(new?FileOutputStream(?file?));
          ???????????writer.write(doc);
          ???????????writer.flush();
          ?????}

          ?????
          ?????
          ????
          private?File?getFile(String?testSaveXml)?throws?IOException?{
          ????????File?file?
          =?null?;
          ???????????URL?url?
          =?clo.getResource(testSaveXml);
          ???????????
          if(url==null){
          ???????????????file?
          =?new?File(testSaveXml);
          ???????????????file.createNewFile();
          ???????????}
          else{
          ???????????????file?
          =?new?File(??url.getFile()?);
          ???????????}
          ????????
          return?file;
          ????}
          ????
          ????
          }

          引用:http://freezingxu.blog.com.cn/archives/2006/1892647.shtml
          /**
          ??*?對(duì)指定的節(jié)點(diǎn)增加屬性和文本
          ??*?
          @param?elmt
          ??*?
          @param?name
          ??*?
          @param?value
          ??*?
          @param?text
          ??*?
          @return
          ??
          */
          ?
          public?Element?addAttribute(Element?elmt,String?name,String?value){
          ??elmt.addAttribute(name,value);
          ??
          return?elmt;
          ?}
          ?
          ?
          /**
          ??*?修改指定節(jié)點(diǎn)的屬性和文本
          ??*?
          @param?elmt
          ??*?
          @param?name
          ??*?
          @param?value
          ??*?
          @param?text
          ??*?
          @return
          ??
          */
          ?
          public?Element?setAttribute(Element?elmt,String?name,String?value){
          ??Attribute?attribute?
          =?elmt.attribute(name);
          ??
          //attribute.setName(name);
          ??attribute.setValue(value);
          ??List?list?
          =?new?ArrayList();
          ??list.add(attribute);
          ??elmt.setAttributes(list);
          ??
          return?elmt;
          ?}
          ?
          ?
          /**
          ??*?刪除指定節(jié)點(diǎn)的指定屬性
          ??*?
          @param?elmt
          ??*?
          @param?name
          ??*?
          @return
          ??
          */
          ?
          public?Element?removeAttribute(Element?elmt,String?name){
          ??elmt.remove(elmt.attribute(name));
          ??
          return?elmt;
          ?}
          ?
          ?
          /**
          ??*?輸出為文件
          ??*?
          @param?doc
          ??*?
          @throws?IOException
          ??
          */
          ?
          public?void?writeFile(Document?doc)?throws?IOException{
          ??FileWriter?out?
          =?new?FileWriter(?"d:/newQuery.xml"?);
          ??doc.write(out);
          ??out.flush();
          ??out.close();
          ?}


          評(píng)論

          # re: dom4j 學(xué)習(xí)  回復(fù)  更多評(píng)論   

          2007-11-06 17:44 by li
          基本的IO操作都有了,還不錯(cuò)

          # re: dom4j 學(xué)習(xí)  回復(fù)  更多評(píng)論   

          2007-11-06 17:59 by G_G
          謝謝

          # re: dom4j 學(xué)習(xí)  回復(fù)  更多評(píng)論   

          2007-11-07 10:29 by dom
          各位好!?
          有沒有關(guān)于dom4j的詳細(xì)一點(diǎn)資料? 謝謝.

          # re: dom4j 學(xué)習(xí)  回復(fù)  更多評(píng)論   

          2007-11-08 23:17 by 姜利陽
          與Jdom的操作方式很相似

          Document
          Element
          Attribute

          SAX方式的讀操作
          Dom方式的寫操作

          # re: dom4j 學(xué)習(xí)  回復(fù)  更多評(píng)論   

          2007-11-09 17:13 by G_G
          @姜利陽
          都是 jdk中xml的包裝類 dom4j 和 jdom (我jdom沒太看呵呵)

          # re: dom4j 學(xué)習(xí)  回復(fù)  更多評(píng)論   

          2007-11-09 21:24 by 姜利陽
          其實(shí)只要用熟了一個(gè), 然后看其他的,原理和思路都很相似
          主站蜘蛛池模板: 临海市| 隆子县| 嘉荫县| 莒南县| 郎溪县| 湘西| 抚顺县| 宁明县| 广汉市| 天柱县| 梅河口市| 承德市| 合阳县| 高青县| 毕节市| 奉化市| 易门县| 克什克腾旗| 潞西市| 台安县| 聊城市| 贡嘎县| 日喀则市| 宁武县| 焦作市| 夹江县| 贵阳市| 西昌市| 汉中市| 阜平县| 固阳县| 策勒县| 麻栗坡县| 百色市| 襄樊市| 苏尼特左旗| 从化市| 乌审旗| 晴隆县| 句容市| 留坝县|