07_XPath_02_常用语法
【工程截图】
【person.xml】
<?xml version="1.0" encoding="UTF-8"?> <students> <student id="88888" phone="15888888888" sex="男"> <name>张三</name> <name>张三2</name> <age>18</age> <school>清华</school> </student> <student id="99999" phone="15999999999" sex="女"> <name>李四</name> <name>李四2</name> <age>28</age> <school>北大</school> </student> <student phone="15666666666" sex="男">啦啦啦</student> <AAAA> <student id="AAA">AAA哈哈哈</student> <!-- student干扰项 --> <aa1>aa111</aa1> <aa2>aa222</aa2> </AAAA> <BBBB> <student id="BBB" sex="女">BBB哈哈哈</student> <!-- student干扰项 --> </BBBB> </students>
【共用的打印节点路径和内容的方法】方便查看
public static void printNodes(String xpath,Document doc){ List<Node> list=doc.selectNodes(xpath); for(Node node:list){ System.out.println("【路径】"+node.getPath()+" 【内容】"+node.getText()); } }
【1.绝对路径 / 】
public static void main(String[] args) throws DocumentException { Document doc=new SAXReader().read(new File("./src/person.xml")); String xpath="";
//后面的代码分别代替下面的"===="内的内容
================================================================= /** * 1. "/" 绝对路径 表示从xml的根位置开始 */ xpath="/students"; //打印结果1 xpath="/students/student/name"; //打印结果2
==================================================================
printNodes(xpath,doc); //调用上面打印路径和内容的方法 (分别注释) }
【打印结果1】
【打印结果2】
【2. 相对路径 // 】
/** * 2. "//" 相对路径 表是不分任何层次结构的选择元素 */ xpath="//student/age"; //打印结果1 xpath="//name"; //打印结果2
【打印结果1】
【打印结果2】
【3.通配符 *】
/** * 3. "*" 通配符 表示匹配所有元素 */ xpath="/students/*"; //打印结果1 xpath="/students/student/*"; //打印结果2
【打印结果1】
【打印结果2】
【4.条件 [ ] 】
/** * 4. "[]" 条件 表好似选择什么条件下的元素 */ //带有id属性的标签 xpath="//student[@id]"; //打印结果1 //第3个student标签 xpath="//student[3]"; //打印结果2 //选择最后一个student标签 xpath="//student[last()]"; //打印结果3
【打印结果1】
【打印结果2】
【打印结果3】
【5. 属性 "@"】
/** * 5. "@" 属性 表好似选择属性节点 */ xpath="//@id"; //打印结果1 xpath="//student[not(@id)]"; //打印结果2 xpath="//student[@id='BBB' and @sex='女']"; //打印结果3
【打印结果1】
【打印结果2】
【打印结果3】
【6. 文本 text()】
/** * 6. text() 表示选择文本内容 */ xpath="//name/text()"; //打印结果1 //选择name为李四的name标签 xpath = "//student/name[text()='李四']";//打印结果2
【打印结果1】
【打印结果2】