xPath对xml文档的处理入门1

XPath 是:使用路径表达式来选取 XML 文档中的节点或者节点集,其他有关概念请自己百度

我测试的环境是:WindowsXP、eclipse3.2、jdk1.6、dom4j1.6.1.jar、z-dom4j-1.4.jar

其中dom4j1.6.1.jar、z-dom4j-1.4.jar都可以在本人的资源库中进行下载,还有Dom4j的API,以及学习文档。

本页使用的xml文档是:

<?xml version="1.0" encoding="GBK"?>
<root name="根节点">
 <book name="书" address="北京">
  <title>
   <titlechild name="书名:CS从入门到精通" address="地址:北京西城" author="马士兵">CS从入门到精通</titlechild>
   <titlechild1 name="aCS从入门到精通titlechild1" address="a北京西城" author="a马士兵" price="37">aCS从入门到精通titlechild1</titlechild1>
   <titlechild2 name="aCS从入门到精通titlechild2" address="a北京西城" author="a马士兵" price="37">aCS从入门到精通titlechild2</titlechild2>
  </title>
  <title>
   <titlechild name="title2书名:CS从入门到精通" address="title2地址:北京西城" author="title2马士兵" price="35">title2CS从入门到精通
    <titlechild name="title3书名:CS从入门到精通" address="title3地址:北京西城" author="title3马士兵" price="34">title3CS从入门到精通</titlechild>
   </titlechild>
  </title>
  <author>
   <authorchild name="书名:java从入门到精通" address="地址:上海虹桥" author="俞敏洪" price="36">候捷</authorchild>
  </author>
  <price>
   <pricechild name="书名:oracle数据库入门" address="地址:西安东大街" author="王学胜" price="34">58.3</pricechild>
  </price>
 </book>
</root>

测试代码:

package org.dom4j.document_study_XPath;

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

import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Test_XPath {

         public static void main(String[] args) {
                 readexml("C:\\1.xml");
         }
 
         //解析原始的xml
         public static void readexml(String xmlpath){
                 SAXReader readxml = new SAXReader();
                 Document doc = null;  
                 try {
                          doc = readxml.read(new File(xmlpath));//解析原始的xml
                          TestSelectSingleNode(doc);//通过XPath路径获取xml文档中第一个符合条件的节点
                          TestSelectNodes(doc);//通过节点的XPath路径获取document的某个节点的所有子节点
                 } catch (Exception e) {
                          e.printStackTrace();
                 }
         }

         /**
            * 通过节点的XPath路径获取document的第一个节点名称是titlechild的节点
            * @param document 一个Dom4j的Document对象 
          */
        public static void TestSelectSingleNode(Document document) {
                Node node = document.selectSingleNode( "//titlechild" );//获取第一个titlechild节点
                String name1 = document.selectSingleNode( "//titlechild").valueOf("@name");
                String name = node.valueOf("@name");//选取节点node名字为name的属性值
                String address = node.valueOf("@address");//选取节点node名字为address的属性值
                String author = node.valueOf("@author");//选取节点node名字为author的属性值
                System.out.println("node节点属性:\n name1=" + name1);
                System.out.println("node节点属性:\n name=" + name + "\t address=" + address + "\t author=" + author );
         }
         /**运行结果:
            * node节点属性:
                  name1=书名:CS从入门到精通

               node节点属性:
                   name=书名:CS从入门到精通  address=地址:北京西城  author=马士兵
           */
 
           /**
             * 通过节点的XPath路径获取document当前的所有子节点
             * @param document 一个Dom4j的Document对象
             */
             @SuppressWarnings("unchecked")
             public static void TestSelectNodes(Document document) {
                      List<Node> listnode =document.selectNodes("//.");//--------------------------
                      System.out.println("node节点:");
                      for(Node node : listnode){
                               if(node.getName()!=null){
                                       System.out.println("节点名称name=" +node.getName() + "\t节点属性name" + node.valueOf("@name"));
                               }
                      }
             }
            /**运行结果:
               * node节点:
                  节点名称name=file:///C:/1.xml 节点属性name
                  节点名称name=root 节点属性name根节点
                  节点名称name=book 节点属性name书
                  节点名称name=title 节点属性name
                  节点名称name=title 节点属性name
                  节点名称name=author 节点属性name
                  节点名称name=price 节点属性name
                  节点名称name=titlechild 节点属性name书名:CS从入门到精通
                  节点名称name=titlechild1 节点属性nameaCS从入门到精通titlechild1
                  节点名称name=titlechild2 节点属性nameaCS从入门到精通titlechild2
                  节点名称name=titlechild 节点属性nametitle2书名:CS从入门到精通
                  节点名称name=authorchild 节点属性name书名:java从入门到精通
                  节点名称name=pricechild 节点属性name书名:oracle数据库入门
                  节点名称name=titlechild 节点属性nametitle3书名:CS从入门到精通
                */ 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值