隨筆 - 154  文章 - 60  trackbacks - 0
          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          聲明:

          該blog是為了收集資料,認識朋友,學習、提高技術,所以本blog的內容除非聲明,否則一律為轉載!!

          感謝那些公開自己技術成果的高人們!!!

          支持開源,尊重他人的勞動!!

          常用鏈接

          留言簿(3)

          隨筆分類(148)

          隨筆檔案(143)

          收藏夾(2)

          其他

          學習(技術)

          觀察思考(非技術)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          xml文檔的解析java中有很多種方法,例如使用domsaxjdom等等,相比之下,我覺得還是jdom比較方便。下面介紹一下jdom的基本使用方法,不對之處還請各位網友之交。謝謝!

          最新的jdom可以到他的網站:http://www.jdom.org去下載,現在的版本是1.0版,下載之后將得到jdom-1.0.zip文件,解壓后進入build文件夾將看到一個名為jdom.jar的包,這個就是jdom的類包了,將它加到你的classpath里就可以使用jdom提供的各種處理xml的類和他們的方法了。應該注意的是在解壓后的文件夾里還有一個lib文件夾,里面保存的是使用jdom的環境包,不過我在我的jdk1.4下使用沒引用這些包一樣好用,不知道是jdk1.4中已經包含了這些東西還是原來我的eclipse已經引用了這些包,呵呵。

          好了,書歸正傳,現在開始介紹jdom包的使用。


             jdom
          包的結構包括:

          org.jdom                包含了所有的xml文檔要素的java

          org.jdom.adapters         包含了與dom適配的java

          org.jdom.filter            包含了xml文檔的過濾器類

          org.jdom.input            包含了讀取xml文檔的類

          org.jdom.output           包含了寫入xml文檔的雷

          org.jdom.transform        包含了將jdom xml文檔接口轉換為其他xml文檔接口

          org.jdom.xpath            包含了對xml文檔xpath操作的類

          下面將通過一個例子介紹jdom的常用操作

          生成xml文檔:

          下面的類將生成一個xml文檔:

          /*

           * Created on 2004-10-9

           *

           * 寫入xml文件的例子

           */

          /**

           * @author lnman

           *

           * To change the template for this generated type comment go to

           * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments

           */

          import java.io.*;

          import org.jdom.*;

          import org.jdom.output.*;

          public class WriteXML

          {

              public void BuildXML() throws Exception

              {

                  Element root,student,number,name,age;

                         

                  root = new Element("student-info"); //生成根元素:student-info  

                  student = new Element("student");      //生成元素:student,該元素中將包含元素number,name,age

                  number = new Element("number");

                  name = new Element("name");

                  age = new Element("age");

                 

                  Document doc = new Document(root);    //將根元素植入文檔doc

                 

                  number.setText("001");

                  name.setText("lnman");

                  age.setText("24");

                  student.addContent(number);

                  student.addContent(name);

                  student.addContent(age);

                  root.addContent(student);

                 

                  Format format = Format.getCompactFormat();

                  format.setEncoding("gb2312");           //設置xml文件的字符為gb2312

                  format.setIndent("    ");               //設置xml文件的縮進為4個空格

                 

                  XMLOutputter XMLOut = new XMLOutputter(format);//在元素后換行,每一層元素縮排四格

                  XMLOut.output(doc, new FileOutputStream("studentinfo.xml")); 

                 

              }

             

              public static void main(String[] args) throws Exception

              {

                  WriteXML w = new WriteXML();

                  System.out.println("Now we build an XML document .....");

                  w.BuildXML();

                  System.out.println("finished!");

              }

          }

          生成的xml文檔為:

          <?xml version="1.0" encoding="gb2312"?>

          <student-info>

              <student>

                  <number>001</number>

                  <name>lnman</name>

                  <age>24</age>

              </student>

          </student-info>

          讀取xml文檔的例子:

          /*

           * Created on 2004-10-9

           *

           *jdom讀取xml文檔的例子

           *

           */

          /**

           * @author lnman

           *

           * To change the template for this generated type comment go to

           * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments

           */

          import org.jdom.output.*;

          import org.jdom.input.*;

          import org.jdom.*;

          import java.io.*;

          import java.util.*;

          public class ReadXML

          {

             

              public static void main(String[] args) throws Exception

              {

                 

                 

                  SAXBuilder builder = new SAXBuilder();

                  Document read_doc = builder.build("studentinfo.xml");

                  Element stu = read_doc.getRootElement();

                  List list = stu.getChildren("student");

                  for(int i = 0;i < list.size();i++)

                  {

                      Element e = (Element)list.get(i);

                      String str_number = e.getChildText("number");

                      String str_name = e.getChildText("name");

                      String str_age = e.getChildText("age");

                      System.out.println("---------STUDENT--------------");

                      System.out.println("NUMBER:" + str_number);

                      System.out.println("NAME:" + str_name);

                      System.out.println("AGE:" + str_age);

                      System.out.println("------------------------------");

                      System.out.println();

                  }      

              }

          }

          Xpath例子:

          JDOM的關于XPATHapiorg.jdom.xpath這個包里。這個包下,有一個抽象類XPath.java和實現類JaxenXPath.java, 使用時先用XPath類的靜態方法newInstance(String xpath)得到XPath對象,然后調用它的selectNodes(Object context)方法或selectSingleNode(Object context)方法,前者根據xpath語句返回一組節點(List對象);后者根據一個xpath語句返回符合條件的第一個節點(Object類型)。請看jdom-1.0自帶的范例程序:
               
          它分析在web.xml文件中的注冊的servlet的個數及參數個數,并輸出角色名。
          web.xml
          文件:
          <?xml version="1.0" encoding="ISO-8859-1"?>
          <!--
          <!DOCTYPE web-app
              PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
              "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
          -->

          <web-app>
              <servlet>
                  <servlet-name>snoop</servlet-name>
                  <servlet-class>SnoopServlet</servlet-class>
              </servlet>
              <servlet>
                  <servlet-name>file </servlet-name>
                  <servlet-class>ViewFile</servlet-class>
                  <init-param>
                      <param-name>initial</param-name>
                      <param-value>1000</param-value>
                      <description>The initial value for the counter  <!-- optional --></description>
                  </init-param>
              </servlet>
              <servlet-mapping>
                  <servlet-name>mv</servlet-name>
                  <url-pattern>*.wm</url-pattern>
              </servlet-mapping>
              <distributed/>

              <security-role>
                <role-name>manager</role-name>
                <role-name>director</role-name>
                <role-name>president</role-name>
              </security-role>
          </web-app>

          處理程序:
          import java.io.*;
          import java.util.*;
          import org.jdom.*;
          import org.jdom.input.*;
          import org.jdom.output.*;
          import org.jdom.xpath.*;

          /**
           * <p><code>XPathReader</code> demonstrates how to
           *   read a Servlet 2.2 Web Archive file using XPath.
           * </p>
           * 
           * @author Jason Hunter
           * @version 1.0
           */
          public class XPathReader {
              
              public static void main(String[] args) throws IOException, JDOMException {
                  if (args.length != 1) {
                      System.err.println("Usage: java XPathReader web.xml");
                      return;
                  }
                  String filename = args[0];//
          從命令行輸入web.xml
                  PrintStream out = System.out;

                  SAXBuilder builder = new SAXBuilder();
                  Document doc = builder.build(new File(filename));//
          得到Document對象

                  // Print servlet information
                  XPath servletPath = XPath.newInstance("http://servlet");//,
          選擇任意路徑下servlet元素
                  List servlets = servletPath.selectNodes(doc);//
          返回所有的servlet元素。

                  out.println("This WAR has "+ servlets.size() +" registered servlets:");
                  Iterator i = servlets.iterator();
                  while (i.hasNext()) {//
          輸出servlet信息
                      Element servlet = (Element) i.next();
                      out.print(""t" + servlet.getChild("servlet-name")
                                              .getTextTrim() +
                                " for " + servlet.getChild("servlet-class")
                                                 .getTextTrim());
                      List initParams = servlet.getChildren("init-param");
                      out.println(" (it has " + initParams.size() + " init params)"); 
                  }
                      
                  // Print security role information
                  XPath rolePath = XPath.newInstance("http://security-role/role-name/text()");
                  List roleNames = rolePath.selectNodes(doc);//
          得到所有的角色名

                  if (roleNames.size() == 0) {
                      out.println("This WAR contains no roles");
                  } else {
                      out.println("This WAR contains " + roleNames.size() + " roles:");
                      i = roleNames.iterator();
                      while (i.hasNext()) {//
          輸出角色名
                          out.println(""t" + ((Text)i.next()).getTextTrim());
                      }
                  }
              }    
          }

          輸出結果:
          C:"java>java   XPathReader web.xml
          This WAR has 2 registered servlets:
                  snoop for SnoopServlet (it has 0 init params)
                  file for ViewFile (it has 1 init params)
          This WAR contains 3 roles:
                  manager
                  director
                  president

          posted on 2007-11-20 17:04 lk 閱讀(383) 評論(0)  編輯  收藏 所屬分類: xml
          主站蜘蛛池模板: 紫金县| 仪陇县| 深水埗区| 汾阳市| 福清市| 平果县| 隆昌县| 内江市| 武城县| 南阳市| 门头沟区| 白河县| 鲁山县| 白沙| 灵川县| 栖霞市| 夹江县| 江源县| 花垣县| 兴隆县| 彭泽县| 犍为县| 昌黎县| 库伦旗| 太湖县| 沾化县| 洞口县| 犍为县| 马尔康县| 克拉玛依市| 黄梅县| 台山市| 沙洋县| 霍山县| 鄄城县| 江源县| 金塔县| 鱼台县| 德清县| 汾阳市| 嵩明县|