dom4j和jaxen框架包自行搜索下载导入
所用xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<contactList>
<contact id="1" vip="true">
<name> Joseph </name>
<gender> male </gender>
<email> joseph@heaven.com </email>
</contact >
<contact id="2" vip="false">
<name> John </name>
<gender> male </gender>
<email> john@heaven.com </email>
</contact>
<contact id="3" vip="false">
<name> Deborah </name>
<gender> female </gender>
<email> deborah@heaven.com </email>
</contact>
<user>
<info>
<group id="12" >
<name id="10" > Michael </name>
</group>
</info>
</user>
</contactList>
测试执行
用@Test注解,代替main方法,需下载导入junit包
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;
import java.io.InputStream;
import java.util.List;
public class XpathDemo1 {
/**除了dom4j,jaxen的包也一定要导入才行,否则报错*/
@Test
public void parse1() throws Exception {
SAXReader sax = new SAXReader();
InputStream is = XpathDemo1.class.getResourceAsStream("/contactList1.xml");
Document doc = sax.read(is);
List<Node> nameNodes = doc.selectNodes("/contactList/contact/name");//绝对路径
for (Node nameNode : nameNodes) {
Element nameEle = (Element) nameNode;
System.out.println(nameEle.getTextTrim());//注意这里不是elementTextTrim,否则报错
}
}
@Test
public void parse2() throws Exception {
/**
* 标准三步
* 得到解析器,得到输入流,得到文件
*/
SAXReader sax = new SAXReader();
InputStream is = XpathDemo1.class.getResourceAsStream("/contactList1.xml");
Document doc = sax.read(is);
Element root = doc.getRootElement();//得到根元素,用根元素调相对路径
List<Node> genderNodes = root.selectNodes("./contact/gender");//相对路径
for (Node genderNode : genderNodes) {
Element genderEle = (Element) genderNode;
System.out.println(genderEle.getTextTrim());//注意这里不是elementTextTrim,否则报错
}
}
@Test
public void parse3() throws Exception {
SAXReader sax = new SAXReader();
InputStream is = XpathDemo1.class.getResourceAsStream("/contactList1.xml");
Document doc = sax.read(is);
List<Node> emailNodes = doc.selectNodes("//email");//在全文件中搜email节点,第一个/代表全文件
for (Node emailNode : emailNodes) {
Element emailEle = (Element) emailNode;
System.out.println(emailEle.getTextTrim());//注意这里不是elementTextTrim,否则报错
}
List<Node> nameNodes = doc.selectNodes("//name");//这次会把Michael也找出来
for (Node nameNode : nameNodes) {
Element nameEle = (Element) nameNode;
System.out.println(nameEle.getTextTrim());
}
}
@Test
public void parse4() throws Exception {
SAXReader sax = new SAXReader();
InputStream is = XpathDemo1.class.getResourceAsStream("/contactList1.xml");
Document doc = sax.read(is);
List<Node> Nodes = doc.selectNodes("//@id");//全文找id属性
for (Node Node : Nodes) {
Attribute att = (Attribute) Node;
System.out.println(att.getName()+"--->"+att.getValue());
}
Node nd = doc.selectSingleNode("//name[@id]");//获得带有id属性,名为name的节点
Element el = (Element) nd;
System.out.println(el.getTextTrim());
Node nd1 = doc.selectSingleNode("//contact[@id=3]");//获得指定了属性值的复数节点
Element el1 = (Element) nd1;
System.out.println(el1.elementTextTrim("name"));
}
}