package com.rlovep.xpath; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.Text; import org.dom4j.io.SAXReader; /** * * @ClassName: TestXpath * @Description: xpath语法入门; * @author peace w_peace@163.com * @date 1 Oct 2015 1:58:30 pm * */ public class TestXpath { private static int count=0; public static void main(String[] args) throws Exception { Document doc = new SAXReader().read("./src/student.xml"); String xpath=""; /* * 1.学习 / 绝对路径,一个 /表示一层 与文件系统类似 */ //从doc中选出根标签 xpath="/studentList"; System.out.println("根标签>>"+doc.selectSingleNode(xpath).getName()); //从doc中选出所有的student标签 xpath="/studentList/student"; List<Node> nodes = doc.selectNodes(xpath); count=1; for(Node i:nodes){ System.out.println("student>>>"+(count++)+":"+i.getName()); } /* * 2。学习 // 表示不分层次结构选择元素,只要符合要求都选出 */ //从doc中选出所有的name标签 xpath="//name"; nodes = doc.selectNodes(xpath); count=1; for(Node i:nodes){ System.out.println("name>>>"+(count++)+":"+i.getName()); } /* * 3.学习 * 通配符 表示匹配所有元素 */ //将根节点下的所有孩子节点选出来 不包括孙标签 xpath="/studentList/*"; nodes = doc.selectNodes(xpath); count=1; for(Node i:nodes){ System.out.println("student>>>"+(count++)+":"+i.getName()); } //将根标签下的所有标签选出://* 表示选出所有不分层次结构 xpath="/studentList//*"; nodes = doc.selectNodes(xpath); count=1; for(Node i:nodes){ System.out.println("Allnode>>>"+(count++)+":"+i.getName()); } /* * 4.学习 @ 表示属性 表示选择属性节点 */ //找出所有的id属性节点 xpath="//@id"; List<Attribute> idNode = (List<Attribute>)doc.selectNodes(xpath); count=1; for(Attribute a:idNode){ System.out.println(a.getName()+"="+a.getValue()); } /* * 5.学习 [] 条件 表示在一定条件下的元素 */ //找出带有id属性的student标签 [@id] xpath="//student[@id]"; nodes = doc.selectNodes(xpath); count=1; for(Node i:nodes){ System.out.println("student and id>>>"+(count++)+":"+i.getName()); } //找出第2个student标签 [2] xpath="//student[2]"; System.out.println("第二个Student>>"+doc.selectSingleNode(xpath).getName()); //找出最后一个student标签 [last()] xpath="//student[last()]"; System.out.println("最后一个Student>>"+doc.selectSingleNode(xpath).getName()); //一下不做演示,自己演示: xpath = "//student[not(@id)]";//选择不包含id属性的student标签节点 xpath = "//student[@id='007']";//选择id属性值为007的student标签 xpath = "//student[@id='008' and @qq='374126165']";//选择id属性值为008,且qq属性为374126165的student标签 /* * 6.学习 text() 表示文本内容 */ //选择name标签下的文本内容,返回Text对象 xpath="//name/text()"; List<Text> text = (List<Text>)doc.selectNodes(xpath); count=1; for(Text t:text){ System.out.println("name Text>>>"+(count++)+":"+t.getText()); } //选择名字为蘅嵘的name标签 xpath="//name[text()='蘅嵘']"; System.out.println("name=="+doc.selectSingleNode(xpath).getText()); } }