标签文本解析:XPath解析

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

猜你喜欢

转载自gaosililin.iteye.com/blog/2314265
今日推荐