java中使用xPath读取xml中的数据

咱们继续学Java——高级篇 第五十二篇:之XPath在XML文档信息定位中的应用 在Java编程的学习道路上,我们始终携手共进,不断深入探索知识的领域。此前我们详细解析了基于XML的Swing布局相关文件,今天我们将聚焦于XPath,学习它如何在XML文档中方便地定位信息,包括XPath的基本语法、在Java中的API使用方式以及通过实际示例展示其优势,这将使我们在处理XML文档时能够更高效地获取所需数据,提升XML数据处理的效率和灵活性。 阅读详情

XPath详解:http://www.360doc.com/content/15/0301/22/9183209_451827261.shtml

XPath是获取xml中数据的一种方式,其简单语法结构如下(引用自w3c):

 

XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

XML 实例文档

我们将在下面的例子中使用这个 XML 文档。

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>

<title lang="eng">Harry Potter</title>

<price>29.99</price>

</book>

<book>  

<title lang="eng">Learning XML</title>  

<price>39.95</price>

</book>

</bookstore>

选取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

下面列出了最有用的路径表达式:

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

实例

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式结果
bookstore选取 bookstore 元素的所有子节点。
/bookstore选取根元素 bookstore。
注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang选取名为 lang 的所有属性。

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

实例

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符描述
*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果
/bookstore/*选取 bookstore 元素的所有子元素。
//*选取文档中的所有元素。
//title[@*]选取所有带有属性的 title 元素。

选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果
//book/title | //book/price选取 book 元素的所有 title 和 price 元素。
//title | //price选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

 

1.实例化DocumentBuilderFactory对象,该对象帮助创建DocumentBuilder对象,用于解析。

 

 

 

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//实例化DocumentBuilderFactory对象
DocumentBuilder bulider = dbf.newDocumentBuilder();

 

2.用DocumentBuilder对象进行解析

 

Document    doc=    bulider.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("xml文件路径"));

 

3.实例化Xpath对象

 

 

PathFactory factory = XPathFactory.newInstance();//实例化XPathFactory对象,帮助创建XPath对象

 

 XPath xpath = factory.newXPath();

 

4.获取XML文件的节点,进行操作

 

XPathExpression compile = xpath.compile("//book");//选取book节点

 

NodeList nodes = (NodeList)compile.evaluate(doc, XPathConstants.NODESET);//获取book节点的所有节点

xml文件:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>

<title lang="eng">Harry Potter</title>

<price>29.99</price>

</book>

<book>  

<title lang="eng">Learning XML</title>  

<price>39.95</price>

</book>

</bookstore>

例子:

解析类:

package com.cn.parse;

import java.io.ByteArrayInputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathException;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;

public class xmlTojava {
    
    public String xmlTojava(String request){
        
        try {
            //使用指定的charset将这个字符串编码为一个字节序列,将结果存储到一个新的字节数组中。
            byte[] b = request.getBytes("utf-8");
            ByteArrayInputStream sr = new ByteArrayInputStream(b);
            //定义一个工厂API,使应用程序能够获得从XML文档生成DOM对象树的解析器。
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            //指定由该代码生成的解析器将提供对XML名称空间的支持。默认情况下,该值设置为false
            factory.setNamespaceAware(false);
            //定义从XML文档获取DOM文档实例的API。使用这个类,应用程序程序员可以从XML获取文档
            DocumentBuilder builder = factory.newDocumentBuilder();
            //文档接口表示整个HTML或XML文档。从概念上讲,它是文档树的根,并提供对文档数据的主要访问
            Document document =  builder.parse(sr);
            XPathFactory xPathFactory = XPathFactory.newInstance();
            XPath xPath = xPathFactory.newXPath();
            //编译XPath表达式以供以后求值
            //country/country_name/text() country节点下的country_name节点的值
            XPathExpression exception1 = xPath.compile("country/country_name/text()");
            XPathExpression exception = xPath.compile("country/provinces/province/province_name/text()");
            //在指定的上下文中计算已编译的XPath表达式,并将结果返回为指定的类型。
            String countryString = (String)exception1.evaluate(document, XPathConstants.STRING);
            String provinceString = (String)exception.evaluate(document,XPathConstants.STRING);
            return countryString+"-----"+provinceString;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
        
    }

}
main函数:

package com.cn.test;

import com.cn.parse.xmlTojava;

public class test1 {
    
    public static void main(String[] args) {
        xmlTojava x = new xmlTojava();
        String request=
                  " <country>"
                  +" <country_name>中国</country_name>"
                  +" <provinces>"
                  + " <province>"
                  + "  <province_name>江苏省</province_name>"
                  + "  <prov_city>南京市</prov_city>"
                  + "   </province>"
                  + "  </provinces>"
                  + " </country>";
                  

        String string = x.xmlTojava(request);
        System.out.print(string);
    }

}
结果:

Java中使用xpath获取xml中的数据 使用xpath读取xml中的数据 立即下载

相关推荐

机械臂 关节电机选型计算

电机 机械臂

hisen92的专栏 8982

Java-使用Dom4j的xpath解析xml的错误解决

刚学了Dom4j,通过Element获取元素及内容已经会了,看了官方文档发现还可以通过xpath解析,但是总是报下面的错误 java.lang.NoClassDefFoundError: org/jaxen/JaxenException at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230) at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)

新阿巴阿巴 1087

ADRC自抗扰PD+ESO控制(博途SCL源代码)

文章浏览阅读119次。线性自抗扰控制(LADRC)系统算法框图-优快云博客文章浏览阅读335次。NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-优快云博客本文介绍了如何将ADRC自抗扰控制算法从Simulink仿真应用到PLC控制中,包括Simulink框图、TD微分器模型、MATLAB函数的使用、SCL控制代码,以及非线性状态误差反馈控制率的实现。ADRC自抗扰PD+ESO控制(CODESYS测试+完整ST代码)-优快云博客。

RXXW_Dor的博客 1315

异常-javax.xml.parsers.FactoryConfigurationError

这样,咱们能够经过调用 System.setProperty("javax.xml.parsers.DocumentBuilderFactory"," org.apache.crimson.jaxp.DocumentBuilderFactoryImpl")来设定相应的XML解析器,或者生成 jaxp.properties文件,在其中加入以下内容class。随着实现的增多,再次运行报错,不知道什么动作引起的异常;2、在对应工程导入相应的包:xercesImpl.jar;

懂一点信息化 1461

30天入门 SAP BTP 开发系列之一:SAP 开发顾问为什么要学习 SAP BTP 开发?能带来哪些收获?

国内 SAP 开发顾问们的微信朋友圈,最近可能都被 SAP 和阿里这两家巨头宣布合作的重磅消息刷屏了吧。近日,德国软件巨头SAP SE与中国电商巨头阿里巴巴集团宣布建立战略合作伙伴关系。根据协议,阿里巴巴集团将利用 SAP Cloud ERP Private 强化企业基础设施,并采用联合上市策略为全球客户创造卓越价值。阿里巴巴将集成 SAP Business Suite,以简化系统维护与升级流程,并实现 AI 功能与核心业务流程的无缝整合。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2373

ransac拟合2D圆(三点定圆 c++详细版)

RANSAC(Random Sample Consensus,随机采样一致性)算法是一种基于随机采样的迭代算法,主要用于从一组包含大量噪声和异常值(外点)的数据中估计数学模型的参数。

twnkie的博客 1047

Java XML 和 JSON 教程(二)

原文:Java XML and JSON 协议:CC BY-NC-SA 4.0 五、使用 XPath 选择节点 Java 包含一个 XPath API,用于简化对 DOM 树节点的访问。本章向您介绍 XPath。 什么是 XPath? XPath 是一种非 XML 声明性查询语言(由 W3C 定义),用于选择 XML 文档的信息集项目作为一个或多个节点。例如,您可以使用 XPath 来定位清单 1-1 的第三个ingredient元素并返回这个元素节点。 除了简化对 DOM 树节点的访问之外,XPath

龙哥盟 2759

指纹浏览器降维打击(下):Cloudflare Turnstile 与 hCaptcha 的底层交互逻辑

本文将深度拆解:Turnstile 与 hCaptcha 的 Iframe 沙箱通信机制,动态混淆 JS 与 PoW(工作量证明)的物理破解法则,以及如何通过 C++ 底层事件合成与环境基因强绑定,实现验证码的“无感过验”。

数据知道的博客 419

获取XML的XPATH - JAVA

XmlErgodicTool.java实现了获取XML的XPATH,并且可以根据需要过滤属性的关键字。 List&lt;String&gt; attrFilter = new ArrayList&lt;String&gt;(); attrFilter.add("name");     1. XmlErgodicTool.java   import java.io.File; ...

QuickRedis 专栏 333

(11-3-01 )

以太坊(Ethereum)是一种基于区块链技术的开源平台和加密货币。它于2015年由Vitalik Buterin和Gavin Wood等开发者创建,并成为比特币之后最受欢迎的加密货币之一。以太坊不仅支持加密货币交易,还为开发者和企业提供了构建去中心化应用程序的强大工具。在本节的内容中,将实型一个完整的机器学习模型项目,智能检测出以太坊区块链中的非法账户。从问题定义到模型建立和评估,再到最终的总结和建议。本实例突出了处理类别不平衡问题的重要性,并展示了如何使用多种机器学习算法来解决实际问题。此外,通过数据可

码农三叔 2169

【2026年华为暑期实习(AI)-4月22日-第三题- 网络异常流量传播链路溯源】(题目+思路+Java&C++&Python解析+在线测试)

本文提出了一种基于空间距离和流量负载的网络异常传播链检测方法。首先通过曼哈顿距离建立基站间的直接关联关系,形成无向图;然后计算各连通块的总负载,筛选出关键节点;最后在关键节点构成的有向无环图(DAG)中寻找用户数最大的传播路径。算法采用DFS/BFS识别连通块,并通过动态规划求解最长路径,时间复杂度为O(N^2)。该方法适用于监控网络中异常流量的定向传播分析,能有效识别高负载区域和最大影响路径。

m0_73659489的博客 187

JAVA中XPATH取值数据对象_java中使用xPath读取xml中的数据

XPath是获取xml中数据的一种方式,其简单语法结构如下(引用自w3c):XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。XML 实例文档我们将在下面的例子中使用这个 XML 文档。Harry Potter29.99Learning XML39.95选取节点XPath 使用路径表达式在 XML 文档中选取节点。节...

weixin_33127399的博客 692

Node-RED系列(二九):使用slider与chart节点来实现双折线时间序列图

今天教使用dashboard的chart组件和slider组件来是实现一个双线的折线图。效果如下 拖动顶部的电量和水量,低下的图表会实时显示时间和值之所以做这个模拟案例,是将教 大家使用chart节点和slider节点先说一下slider节点,该节点是一个滑块节点,可以接受上一节点的 msg.payload,作为滑块的值, slider必须设置最大值和最小值。且不能动态设置。 此外当用户拖动slider滑块,改变值时,该节点会向下传递当前值 以属性payload装载。在说一下chart节点,该节点可以用于

知无涯 4967

JAVA中XPATH取值数据对象_java中使用xPath讀取xml中的數據

XPath是獲取xml中數據的一種方式,其簡單語法結構如下(引用自w3c):XPath 使用路徑表達式來選取 XML 文檔中的節點或節點集。節點是通過沿着路徑 (path) 或者步 (steps) 來選取的。XML 實例文檔我們將在下面的例子中使用這個 XML 文檔。Harry Potter29.99Learning XML39.95選取節點XPath 使用路徑表達式在 XML 文檔中選取節點。節...

weixin_35344136的博客 292

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java中使用Xpath读取XML文件数据

package maven_test; import java.io.FileInputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XpathDemo { public stat...

zg97zb的博客 1214

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

XPath读取xml文件

1.创建解析工厂 2.创建解析器 3.读xml文件,生成w3c.docment对象树 4.创建XPath对象 5.通过路径查找对象 例子: import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers...

weixin_30376323的博客 153

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

xpath 在java中的应用

xpath 作为xml的遍历工具,在自动测试中经常使用。同时我觉得也可以很好的应用于java项目的配置工作中,如果数据库链接。当然java web项目有很多配置的方法。这里只是提出自定义一个配置xml文件,用xpath读取内容的方法,以供参考。 首先在项目根目录创建一个xml文件:db.xml 。我这里使用的mysql数据库<?xml version="1.0" encoding="UTF-8"?

leejeff的专栏 937

java操作xml_java操作xml的方法汇总及解析

这篇文章主要介绍了java操作xml的方法汇总及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下一丶常用方法主要有3个方面, 1读取xml文件, 2使用xpath根据指定路径获取某一节点数据 3, xml和java bean的转换XmlUtils.java/*** 和cn.hutool.core.util.XmlUtil许多功能重合, 本类可以...

weixin_30686891的博客 1065

Dom4j使用Xpath语法读取xml节点

<spanstyle="font-size:small;"mce_style="font-size:small;">packagecom.wt.dom4j; importjava.util.List; importorg.dom4j.Document; importorg.dom4j.Element; importorg.dom4j.io.SAXReader;...

weixin_30270561的博客 104

XMl解析

XMl的解析1. Java中配置文件的三种配置位置及读取方式2.XML的用途3.dom4j+xpath解析xml文件 1. Java中配置文件的三种配置位置及读取方式 1.src根目录下:Xxx.class.getResourceAsStream("/config.properties"); /** * 各个位置下的资源文件(properties、xml结尾的文件)的读取方式 * 1.同包下的...

YY908046027的博客 198

6 .XML解析

Demo2.java 2.2 配置位置 Demo3.java

weixin_62356088的博客 156

使用dom4j + XPath 解析XML

1、导入依赖2、步骤解析。

weixin_46533227的博客 670

java xpath 解析xml_Java XPath解析器 - 查询XML文档

全屏演示示例这是我们需要查询输入的文本文件:dinkarkaddinkar85VaneetGuptavinni95jasvirsingnjazz90演示示例:XPathParserDemo.javapackagecn.sxt.xml;importjava.io.File;importjava.io.IOException;importjavax.xml.parsers.DocumentBu...

weixin_33561910的博客 98

XML入门及Dom4j和XPath的使用

ddd

weixin_43952736的博客 384

XML解析

一.java中配置文件的三种配置位置及读取方式 xml和properties是属性文件 存放位置 2.1 读取同级目录下的配置文件 a. 先写明要读取的文件名 b. 得到properties类 c. 把流加载进去(抛异常) d. 打印即可(.property) package com.xfz.parse; import java.io.IOException; import java.io....

xfz610614的博客 237
上一篇: start_redis.bat 闪退
下一篇: dom4j.jar
夜寻枝
博客等级 码龄10年 12粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值