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();
}