XPath 解析xml文件
什么是XPath?
-
结构定义 - XPath定义像元素,属性,文本,命名空间,处理指令,注释和文档节点的XML文档部分
-
路径表达式 - XPath提供了强大的路径表达式选择的节点或在XML文档中的节点列表。
-
标准功能 - XPath提供了丰富的标准函数库操纵字符串值,数值,日期和时间比较,节操作,顺序操作,布尔值等。
-
XSLT重要组成部分 - XPath是在XSLT标准的主要元素之一,是必须有知识,以便使用XSLT的文档。
-
W3C推荐 - XPath是万维网联盟(W3C)的官方推荐
如我们常见的html文本。
XPath的表达式以及语法:
简单的例子 :
try { File file = new File("C:\\Users\\admin\\Desktop\\Files\\xPathTest.xml"); //生成document对象 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder(); Document document = documentBuilder.parse(file); document.getDocumentElement().normalize(); XPath xPath = XPathFactory.newInstance().newXPath(); //选取属性rollno=593的节点 // String exprsion = "/class/student[@rollno=\"593\"]"; //选取倒数第二个 // String exprsion = "/class/student[last()-2]"; //选取第一个 // String exprsion = "/class/student[1]"; String exprsion = "/class/student"; NodeList nodes = (NodeList) xPath.compile(exprsion).evaluate(document, XPathConstants.NODESET); for (int i = 0; i < nodes.getLength(); i++) { Node item = nodes.item(i); //标签名称 String nodeName = item.getNodeName(); System.out.println("nodeName:" + nodeName); //标签属性的值 String nodeValue = item.getNodeValue(); System.out.println("nodeValue:" + nodeValue); //获取标签下的所有的值(包括子节点) String textContent = item.getTextContent(); System.out.println("textContent:" + textContent); //获取节点的类型 short nodeType = item.getNodeType(); System.out.println("nodeType:" + nodeType); //获取节点的指定属性的值 Element element = (Element) item; String attribute = element.getAttribute("rollno"); System.out.println("attribute:" + attribute); //获取子节点的值 String firstname = element.getElementsByTagName("firstname").item(0).getTextContent(); String lastname = element.getElementsByTagName("lastname").item(0).getTextContent(); String nickname = element.getElementsByTagName("nickname").item(0).getTextContent(); String marks = element.getElementsByTagName("marks").item(0).getTextContent(); System.out.println("firstname:" + firstname); System.out.println("lastname:" + lastname); System.out.println("nickname:" + nickname); System.out.println("marks:" + marks); } } catch (Exception e) { e.printStackTrace(); }