使用dom4j和XPath解析XML之例子一

使用dom4j和XPath解析XML之例子一

 

 

下载源代码


〖 作者:cuiweibing 〗〖 大小:5k 〗〖 发布日期:2007-08-10 〗〖 浏览:0 〗

  包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), TestDom4jReadExmple.java(测试解析的结果) .

TestDom4jReadExmple.java
package dom4jExample.read;

/**
 * 测试Dom4jReadExmple解析的情况
 * @author cuiweibing
 * @since 2007.8.10
 */
public class TestDom4jReadExmple {
 public static void main(String[] args) {
     try{
       Dom4jReadExmple drb=new Dom4jReadExmple();
       //利用XPath操作XML文件,打印想要的属性值
       drb.printSelectedNodeValue("studentInfo.xml");
     }catch(Exception ex){
       ex.printStackTrace();
     }
   }
}

<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-1832179689702023&dt=1188027915765&lmt=1186737022&format=336x280_as&output=html&correlator=1188027915656&channel=7111701428&url=http%3A%2F%2Fwww.java3z.com%2Fcwbwebhome%2Farticle%2Farticle5%2F5827.html%3Fid%3D1541&color_bg=FFFFFF&color_text=000000&color_link=0000FF&color_url=3D81EE&color_border=FFFFFF&ad_type=text_image&ref=http%3A%2F%2Fwww.baidu.com%2Fs%3Flm%3D0%26si%3D%26rn%3D10%26tn%3Dmaxthon2%26ie%3Dgb2312%26ct%3D0%26wd%3Dorg%252Edom4j%252EDocument%26pn%3D20%26cl%3D3&cc=99&ga_vid=1127308352.1188027916&ga_sid=1188027916&ga_hid=1042658225&flash=9&u_h=768&u_w=1024&u_ah=738&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency">

 studentInfo.xml

<?xml version="1.0" encoding="gb2312"?>
<students>
    <student age="25"><!--如果没有age属性,默认的为20-->
        <name>崔卫兵</name>
        <college>PC学院</college>
        <telephone>62354666</telephone>
        <notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
    </student>
    <student>
        <name>cwb</name>
        <college leader="leader1">PC学院</college><!--如果没有leader属性,默认的为leader-->
        <telephone>62358888</telephone>
        <notes>男,1987年生,硕士,现就读于中国农业大学</notes>
    </student>
    <student age="45">
        <name>xxxxx</name>
        <college leader="">xxx学院</college>
        <telephone>66666666</telephone>
        <notes>注视中,注释中</notes>
    </student>
    <student age="">
        <name>yyyyyy</name>
        <college leader="学院领导">yyyy学院</college>
        <telephone>88888888</telephone>
        <notes>注视中111,注释中222</notes>
    </student>
</students>

Dom4jReadExmple.java

package dom4jExample.read;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
 * 利用dom4j与XPath进行XML编程
 * @author cuiweibing
 * @since 2007.8.10
 */
public class Dom4jReadExmple {

 /**
  * 利用XPath操作XML文件,打印指定节点或者属性的值
  * @param filename String 待操作的XML文件(相对路径或者绝对路径)
  */
 public void printSelectedNodeValue(String filename){
  try {
   SAXReader saxReader = new SAXReader();
   Document document = saxReader.read(new File(filename));
   //打印所有student节点的属性age值,如果有的话
   List list = document.selectNodes("/students/student/@age");
   Iterator iter = list.iterator();
   while (iter.hasNext()) {
    Attribute attribute = (Attribute) iter.next();
    System.out.println("/students/student/@age:"+attribute.getValue());
   }
      //打印所有college节点值,如果有的话
   list = document.selectNodes("/students/student");
   iter = list.iterator();
   while (iter.hasNext()) {
     Element bookElement = (Element) iter.next();
     Iterator iterator = bookElement.elementIterator("college");
     while (iterator.hasNext()) {
      Element titleElement = (Element) iterator.next();
      System.out.println("/students/student/college:"+titleElement.getText());
     }
   }
   //测试节点的一些方法
   list = document.selectNodes("//telephone");
   iter = list.iterator();
   while (iter.hasNext()) {
     Element titleElement = (Element) iter.next();
     System.out.print("//telephone:getName:"+titleElement.getName());
     System.out.print("  ##getNodeType:"+titleElement.getNodeType());
     System.out.print("  ##getTextTrim:"+titleElement.getTextTrim());
     System.out.print("  ##getNamespaceURI:"+titleElement.getNamespaceURI());
     System.out.print("  ##getNodeTypeName:"+titleElement.getNodeTypeName());
     System.out.print("  ##getQualifiedName:"+titleElement.getQualifiedName());
     System.out.print("  ##getUniquePath:"+titleElement.getUniquePath());
     System.out.println("  ##getPath:"+titleElement.getPath());
   }
   //打印所有name节点值,如果有的话,与上面college的取法不一样
   list = document.selectNodes("/students/student/name");
   iter = list.iterator();
   while (iter.hasNext()) {
    Element titleElement = (Element) iter.next();
    System.out.println("/students/student/name:"+titleElement.getText());
  }
  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }
}

运行结果

/students/student/@age:25
/students/student/@age:45
/students/student/@age:
/students/student/college:PC学院
/students/student/college:PC学院
/students/student/college:xxx学院
/students/student/college:yyyy学院
//telephone:getName:telephone  ##getNodeType:1  ##getTextTrim:62354666  ##getNamespaceURI:  ##getNodeTypeName:Element  ##getQualifiedName:telephone  ##getUniquePath:/students/student[1]/telephone  ##getPath:/students/student/telephone
//telephone:getName:telephone  ##getNodeType:1  ##getTextTrim:62358888  ##getNamespaceURI:  ##getNodeTypeName:Element  ##getQualifiedName:telephone  ##getUniquePath:/students/student[2]/telephone  ##getPath:/students/student/telephone
//telephone:getName:telephone  ##getNodeType:1  ##getTextTrim:66666666  ##getNamespaceURI:  ##getNodeTypeName:Element  ##getQualifiedName:telephone  ##getUniquePath:/students/student[3]/telephone  ##getPath:/students/student/telephone
//telephone:getName:telephone  ##getNodeType:1  ##getTextTrim:88888888  ##getNamespaceURI:  ##getNodeTypeName:Element  ##getQualifiedName:telephone  ##getUniquePath:/students/student[4]/telephone  ##getPath:/students/student/telephone
/students/student/name:崔卫兵
/students/student/name:cwb
/students/student/name:xxxxx
/students/student/name:yyyyyy

<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-1832179689702023&dt=1188027915828&lmt=1186737022&prev_fmts=336x280_as&format=468x60_as&output=html&correlator=1188027915656&url=http%3A%2F%2Fwww.java3z.com%2Fcwbwebhome%2Farticle%2Farticle5%2F5827.html%3Fid%3D1541&color_bg=FFFFFF&color_text=000000&color_link=3366FF&color_url=008000&color_border=3366FF&ad_type=text_image&ref=http%3A%2F%2Fwww.baidu.com%2Fs%3Flm%3D0%26si%3D%26rn%3D10%26tn%3Dmaxthon2%26ie%3Dgb2312%26ct%3D0%26wd%3Dorg%252Edom4j%252EDocument%26pn%3D20%26cl%3D3&cc=99&ga_vid=1127308352.1188027916&ga_sid=1188027916&ga_hid=1042658225&flash=9&u_h=768&u_w=1024&u_ah=738&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="468" scrolling="no" height="60" allowtransparency="allowtransparency">
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值