在Java中使用xpath對xml解析

高洛峰
發布: 2016-10-09 16:36:19
原創
1685 人瀏覽過

xpath是一門在xml文件中尋找資訊的語言。 xpath用於在XML文件中透過元素和屬性進行導航。它的返回值可能是節點,節點集合,文本,以及節點和文本的混合等。
在學習本文檔之前應該對XML的節點,元素,屬性,文本,處理指令,註釋,根節點,命名空間以及節點關係有一定的了解以及對xpath也有了解。
XML學習位址:http://www.runoob.com/xml/xml-tutorial.html
xpath基本語法學習位址:http://www.runoob.com/xpath/xpath-tutorial.html
xpath官方文檔:https://yunpan.cn/cvc4tEIGy5EvS 存取密碼9d16
本文主要介紹:Java中使用xpath操作對xml操作。
1)首先在dom4j中如何使用xpath技術
導入xPath支援的jar包。 jaxen-1.1-beta-6.jar(首先要先導入dom4j包,dom4j下載網址:http://www.dom4j.org/dom4j-1.6.1/)。

在Java中使用xpath對xml解析

導包之後如圖所示:

在Java中使用xpath對xml解析



節點總結說節點
2)在Java中使用xpath方法,主要有兩點:
List selectNodes("xpath表達式"); 查詢多個節點物件
Node selectSingleNode("xpath表達式"); 查詢一個節點物件
下面就用實例說明使用方法。

一、selectNodes使用方法:

package com.vastsum.demo;

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

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 
 * @author shutu008
 *selectNode的使用方法
 */
public class xpathDemo {

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

    Document doc = new SAXReader().read(new File("./src/contact.xml"));
        
        /**
         * @param xpath 表示xpath语法变量
         */
    String xpath="";
        
        /**
         * 1.      /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)
         */
        xpath = "/contactList";
        xpath = "/contactList/contact";
        
        /**
         * 2. //     相对路径       表示不分任何层次结构的选择元素。
         */
        xpath = "//contact/name";
        xpath = "//name";
        
        /**
         * 3. *      通配符         表示匹配所有元素
         */
        xpath = "/contactList/*"; //根标签contactList下的所有子标签
        xpath = "/contactList//*";//根标签contactList下的所有标签(不分层次结构)
        
        /**
         * 4. []      条件           表示选择什么条件下的元素
         */
        //带有id属性的contact标签
        xpath = "//contact[@id]";
        //第二个的contact标签
        xpath = "//contact[2]";
        //选择最后一个contact标签
        xpath = "//contact[last()]";
        
        /**
         * 5. @     属性            表示选择属性节点
         */
        xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象
        xpath = "//contact[not(@id)]";//选择不包含id属性的contact标签节点
        xpath = "//contact[@id='002']";//选择id属性值为002的contact标签
        xpath = "//contact[@id='001' and @name='eric']";//选择id属性值为001,且name属性为eric的contact标签
        
        /**
         *6.  text()   表示选择文本内容
         */
        //选择name标签下的文本内容,返回Text对象
        xpath = "//name/text()";
        xpath = "//contact/name[text()='张三']";//选择姓名为张三的name标签
        
        
        List<Node> list = doc.selectNodes(xpath);
        for (Node node : list) {
            System.out.println(node);
        }
    
        //写出xml文件
        //输出位置
        FileOutputStream out = new FileOutputStream("d:/contact.xml");
        
        //指定格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter writer = new XMLWriter(out,format);
        
        //写出内容
        writer.write(doc);
        
        //关闭资源
        writer.close();
        
    }
    

}
登入後複製

二、selectSingleNode的使用方法

package com.vastsum.demo;

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

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 
 * @author shutu008
 *selectSingleNode的使用
 */
 public class xpathDemo1{
     public static void main(String[] args) throws Exception{
         //读取XML文件,获得document对象
        SAXReader saxReader = new SAXReader();    
        Document doc = saxReader.read(new File("./src/contact.xml"));
        
        //使用xpath获取某个节点
        String xpath = "";
        
        //对contact元素 id="001"的节点,操作
        xpath = "//contact[@id = &#39;001&#39;]";
        Element contactElem =    (Element)doc.selectSingleNode(xpath);
        
        //设置这个节点的属性值
        contactElem.addAttribute("name", "001");
        
        //输出这个节点的所有属性值
        for(Iterator it = contactElem.attributeIterator();it.hasNext();){
        Attribute conAttr = (Attribute)it.next();
        String conTxt = conAttr.getValue();
        String conAttrName = conAttr.getName();
        System.out.println(conAttrName+" = "+conTxt);
        }
        
     }
 }
登入後複製


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板