XML文件的数据检索:Xpath(API)

161 阅读1分钟

image.png

image.png

image.png

image.png

image.png

image.png``` package run;

import org.dom4j.*; import org.dom4j.io.SAXReader; import org.junit.Test;

import java.util.List;

public class Demo {

//绝对路径: /根元素/子元素/子元素
@Test

public void retrieval1() throws Exception {

    SAXReader saxReader = new SAXReader();
    Document document = saxReader.read(Demo.class.getResourceAsStream("/app.xml"));
   List<Node> nodes = document.selectNodes("/contactList/contact/name");
    for (Node node : nodes) {
        //Element element = (Element) node;
       // System.out.println(element.getTextTrim());
        System.out.println(((Element) node).getTextTrim());
    }
}
//相对路径: ./子元素/子元素 (.代表了当前元素)
@Test
public void retrieval2() throws Exception {
    SAXReader saxReader = new SAXReader();
    Document document = saxReader.read(Demo.class.getResourceAsStream("/app.xml"));
    Element root = document.getRootElement();
    List<Node> nodes = root.selectNodes("/contact/name");
    for (Node node : nodes) {
        System.out.println(((Element) node).getTextTrim());
    }
}
//全文搜索:

//元素 在全文找该元素
//元素1/元素2 在全文找元素1下面的一级元素2
//元素1//元素2 在全文找元素1下面的全部元素2
@Test
public void retrieval3() throws Exception {
    SAXReader saxReader = new SAXReader();
    Document document = saxReader.read(Demo.class.getResourceAsStream("/app.xml"));
   // List<Node> nodes = document.selectNodes("//name");
   // List<Node> nodes = document.selectNodes("//contact/name");
    List<Node> nodes = document.selectNodes("//contact//name");
    for (Node node : nodes) {
        System.out.println(((Element) node).getTextTrim());
    }
}
//属性搜索:
//@id 全文找id这个属性
//name[@id] 全文找带id的name对象
//name[@id=1] 全文找带id且id=1的name对象
@Test
public void retrieval4() throws Exception {
    SAXReader saxReader = new SAXReader();
    Document document = saxReader.read(Demo.class.getResourceAsStream("/app.xml"));
   // List<Node> nodes = document.selectNodes("//@id");
   // Node nodes = document.selectSingleNode("//name[@id]");
   Node nodes = document.selectSingleNode("//contact[@id=1]");
    System.out.println(((Element) nodes).getTextTrim());
}

}