XML 解析

Java调用C# WebService接口方式【多篇文章经验,亲测可用】 一、出发点: 之前调用webservice一直用的httppost,最近和c#调试接口的时候发现之前的方案调不通。 然后就把结果交给百度了,毕竟并不是我们喜欢粘贴复制。 别人搞好的东西,我们再花时间去研究,除了优化,就没看出其他意义。站在巨人的肩膀上,让我们起飞。 二、解决方案: 下面这个是贴的别人的参考代码: 地址的话给大家放出来 :Java调用C#WebService接口方式 package test; import java.rmi.RemoteException; impo. 阅读详情

XML 解析


1. 解析概述

     当将数据存储在XML后,我们就希望通过程序获得XML的内容。如果我们使用Java基础所学习的IO知  识是可以完成的,不过你需要非常繁琐的操作才可以完成,且开发中会遇到不同问题(只读、读写)。  人们为不同问题提供不同的解析方式,并提交对应的解析器,方便开发人员操作XML。

2.XML解析方式

开发中比较常见的解析方式有两种,如下:

2.1 DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。

  • 优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
  • 缺点:XML文档过大,可能出现内存溢出显现。                                                      

2.2 SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方  式进行具体解析,每执行一行,都将触发对应的事件。(了解)

  • 优点:占用内存少 处理速度快,可以处理大文件
  • 缺点:只能读,逐行后将释放资源。

3. XML常见的解析器

解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,  有提供易于操作的解析开发包

  • JAXP:sun公司提供的解析器,支持DOM和SAX两种思想
  • DOM4J:一款非常优秀的解析器 , Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
  • Jsoup:jsoup 是一款Java 的HTML解析器 ,也可以解析XML
  • PULL:Android内置的XML解析方式,类似SAX。

4. dom4j 的使用

4.1 导入JAR包

4.2 API介绍

使用核心类SaxReader加载xml文档获得Document,通过Document  对象获得文档的根元素,然后就可以操作了

常用API如下:

  • SaxReader对象

read(…) 加载执行xml文档

  • Document对象

getRootElement() 获得根元素

  • Element对象

elements(…) 获得指定名称的所有子元素。可以不指定名称

element(…) 获得指定名称的第一个子元素。可以不指定名称

getName() 获得当前元素的元素名

attributeValue(…) 获得指定属性名的属性值

elementText(…) 获得指定名称子元素的文本值

getText() 获得当前元素的文本内容

5. 准备xml文件

编写user.xsd schema约束,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns="http://www.lagou.com/xml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.lagou.com/xml"
elementFormDefault="qualified">


<xsd:element name="users" type="usersType"/>
<xsd:complexType name="usersType">
<xsd:sequence>
<xsd:element name="user" type="userType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="userType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="age" type="ageType" />
<xsd:element name="hobby" type="hobbyType" />
</xsd:sequence>
<xsd:attribute name="id" type="numberType" use="required"/>
</xsd:complexType>


<xsd:simpleType name="ageType">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>


<xsd:simpleType name="hobbyType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="抽烟"/>
<xsd:enumeration value="喝酒"/>
<xsd:enumeration value="烫头"/>
</xsd:restriction>
</xsd:simpleType>


<xsd:simpleType name="numberType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d"/>
</xsd:restriction>
</xsd:simpleType>


</xsd:schema>

编写user.xml 引入约束,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<users
xmlns="http://www.lagou.com/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.lagou.com/xml user.xsd"
>
<user id="1">
<name>张百万</name>
<age>20</age>
<hobby>抽烟</hobby>
</user>

<user id="2">
<name>于谦</name>
<age>50</age>
<hobby>喝酒</hobby>
</user>

<user id="3">
<name>刘能</name>
<age>40</age>
<hobby>烫头</hobby>
</user>
</users>

6. 读取XML

public class TestDOM4j {

//获取XML文件中的 所有的元素名称(标签) @Test
public void test1() throws DocumentException {

//1.获取XML解析对象
SAXReader reader = new SAXReader();

//2.解析XML 获取 文档对象 document Document document =
reader.read("H:\\jdbc_work\\xml_task03\\src\\com\\lagou\\xml03\\user.xml");

//3.获取根元素
Element rootElement = document.getRootElement();

//获取根元素名称System.out.println(rootElement.getName());

//获取 根元素下的标签
List<Element> elements = rootElement.elements(); for (Element element : elements) {
System.out.println("根标签下的子节点: " + element.getName());

List<Element> eList = element.elements(); for (Element e : eList) {
System.out.println("user标签下的子节点" + e.getName());
}

break;
}

}
/**
* 获取具体的节点内容 获取张百万的所有信息
*/ @Test
public void test2() throws DocumentException {
//1.创建XML文档解析对象
SAXReader sr = new SAXReader();

//2.读取XML获取到document对象
Document document = sr.read("src\\com\\lagou\\xml02\\user.xml");

//3.获取根节点
Element rootElement = document.getRootElement();

//4.得到当前节点的 所有子节点
List<Element> elements = rootElement.elements();

//5.获取第一个子节点
Element user = elements.get(0);

//6.获取所有信息
String id = user.attributeValue("id"); String name = user.elementText("name"); String age = user.elementText("age");
//使用getText获取当前元素的文本内容
String hobby = user.element("hobby").getText();

//打印
System.out.println(id+" " + name +" " + age +" " + hobby);
}

7. xpath方式读取xml

7.1 xpath介绍

XPath 是一门在 XML 文档中查找信息的语言。 可以是使用xpath查找xml中的内容。
XPath 的好处
     由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合
XPATH就可以直接获取到某个元素

需要再导入 jaxen-1.1-beta-6.jar

7.2 XPath基本语法介绍

使用dom4j支持xpath的操作的几种主要形式

语法

说明

/AAA/DDD/BBB

表示一层一层的,AAA下面 DDD下面的BBB

//BBB

表示和这个名称相同,表示只要名称是BBB,都得到

//*

所有元素

BBB[1] , BBB[last()]

第一种表示第一个BBB元素, 第二种表示最后一个BBB元素

//BBB[@id]

表示只要BBB元素上面有id属性,都得到

//BBB[@id='b1']

表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1

7.3 API介绍

常用方法:

  • selectSingleNode(query): 查找和 XPath 查询匹配的一个节点。

       参数是Xpath 查询串。

  • selectNodes(query): 得到的是xml根节点下的所有满足 xpath 的节点;

       参数是Xpath 查询串。

  • Node: 节点对象

7.4 Xpath读取XML

1)数据准备book.xml 代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<bookstore>
    <book id="book1">
        <name>金瓶梅</name>
        <author>金圣叹</author>
        <price>99</price>
    </book>
    <book id="book2">
        <name>红楼梦</name>
        <author>曹雪芹</author>
        <price>69</price>
    </book>
    <book id="book3">
        <name>Java编程思想</name>
        <author>埃克尔</author>
        <price>59</price>
    </book>
</bookstore>

2)使用Xpath语法解析book.xml 代码如下:

package com.lagou.xml04;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.List;

public class TestXPath {

    /*
    *  使用selectSingleNode() 方法 查询自定的节点信息
    *
    * */
    @Test
    public void test1() throws DocumentException {

        //1.创建XML解析对象
        SAXReader reader = new SAXReader();

        //2.解析XML 获取 文档对象
        Document document = reader.read("H:\\jdbc_work\\xml_task03\\src\\com\\lagou\\xml04\\book.xml");

        //3.通过selectSingleNode() 方法获取 name节点
        Node node1 = document.selectSingleNode("/bookstore/book/name");
        System.out.println("节点的名称: " + node1.getName());
        System.out.println("书名: " + node1.getText());

        //4.获取第二本书的书名
        Node node2 = document.selectSingleNode("/bookstore/book[3]/name");
        System.out.println("书名: " + node2.getText());
    }


    /*
    * 使用 selectSIngleNode() 方法获取 属性值 或者 通过属性值获取到节点信息
    *
    * */
    @Test
    public void test2() throws DocumentException {

        SAXReader reader = new SAXReader();

        Document document = reader.read("H:\\jdbc_work\\xml_task03\\src\\com\\lagou\\xml04\\book.xml");

        //1.获取第一个booke节点中的  id属性的值
        Node node1 = document.selectSingleNode("/bookstore/book/attribute::id");
        System.out.println("第一个book的id属性值: " + node1.getText() );

        //2.获取最后一个book节点的 id属性值
        Node node2 = document.selectSingleNode("/bookstore/book[last()]/attribute::id");
        System.out.println("最后一个book节点中的属性值: " + node2.getText());

        //3.通过id的值 获取book2节点 中的书名
        Node node3 = document.selectSingleNode("/bookstore/book[@id='book2']");

        String name = node3.selectSingleNode("name").getText();
        System.out.println("id为book2的 节点的书名是: " + name);

    }

    /*
    *  使用selectNodes() 获取所有指定名称 的节点
    *
    * */
    @Test
    public void test3() throws DocumentException {

        SAXReader reader = new SAXReader();

        Document document = reader.read("H:\\jdbc_work\\xml_task03\\src\\com\\lagou\\xml04\\book.xml");

        //1.查询所有的节点
        List<Node> list = document.selectNodes("//*");

        for (Node node : list) {
            System.out.println("节点名: " + node.getName());
        }

        //2.获取所有的书名
        List<Node> list1 = document.selectNodes("//name");
        for (Node node : list1) {
            System.out.println("书名: " + node.getText());
        }

        //3.获取 id值为 book1 的节点中的所有内容
        List<Node> list2 = document.selectNodes("/bookstore/book[@id='book1']//*");
        for (Node node : list2) {
            System.out.println(node.getName() + " = " + node.getText());
        }
    }
}

节选自拉钩教育JAVA系列教程

 

 

 

 

 

Yersinia:layer 2攻击框架!全参数详细教程!Kali Linux教程! Yersinia是一个专为执行二层网络攻击设计的框架,利用多种网络协议的弱点进行渗透测试和网络分析。它支持针对生成树协议(STP)、思科发现协议(CDP)、动态中继协议(DTP)、动态主机配置协议(DHCP)、热备用路由器协议(HSRP)、802.1q、802.1x、交换机间链路协议(ISL)和VLAN中继协议(VTP)的攻击。这些攻击可能导致网络中的拒绝服务(DoS)或为更复杂的攻击创造条件。Yersinia对渗透测试人员和网络管理员非常有用,但使用时需谨慎,以免造成网络不稳定。 阅读详情

相关推荐

深入浅出CenterFusion

结合论文和代码理解CenterFusion

Untitled的专栏 5104

通过webservice提交xml数据

通过webservice提交xml数据加粗样式 所需maven <!-- wsdl webService包 --> <dependency> <groupId>org.apache.axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> &l

weixin_42563880的博客 1605

解决com.kingbase8.util.KSQLException: This _connection has been closed.

一个消息管理系统,系统采用kingbase8数据库,数据库采用单体模式,后台应用也采用springboot单体模式。系统正式上线后,出现几个JDBC响应的异常信息: com.kingbase8.util.KSQLException: An I/O error occurred while sending to the backend. java.net.SocketTimeoutException: Read timed out.

qq_38127559的博客 2757

Webservice开发之xsd文件示例代码

场景 SpringBoot整合spring-ws开发webservice接口(全流程详细教程)参照: https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/article/details/89395156 实现 xsd文件示例代码: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmln...

BADAO_LIUMANG_QIZHI的博客 3150

FPGA以太网接口设计避坑指南:GMII与RGMII时序转换的三种实现方案对比

本文深入解析FPGA以太网接口设计中GMII与RGMII时序转换的三种实现方案,包括Xilinx官方IP核、手工原语逻辑和开源方案gmii_to_rgmii。通过对比分析各方案的优缺点和适用场景,为工程师提供技术选型指南,帮助避免常见设计陷阱,提升高速网络设备开发的效率和可靠性。

weixin_42570484的博客 385

TI 实时操作系统SYS/BIOS使用总结

1:概述: SYS/BIOS 是一个可扩展的实时的操作系统。具有非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性,强壮的抢占系统,优化的内存分配和堆栈管理(尽量少的消耗和碎片)。能够实现系统的模块化并可裁剪。 最大的特点就是:实时。 2:XDCtools: XDCtools 是SYS/BIOS引用的一种实时的软件组件技术(RTSC),它包括一些有用的工具,标准的AP

带头奋青的博客 5万+

soap 返回xml 文件 soap 文件 webservice wsdl

    public Map pushDate(String urladd, String apikey, String mobile,            String photourl, String description, String partnerid,            String nickname, String gender, String dob, String ema

技术博客 2624

Matlab实战:如何用MMG方程预测船舶轨迹(附完整代码)

本文提供了一份基于MMG方程的Matlab实战指南,详细讲解了如何从零构建船舶轨迹预测模型。内容涵盖MMG模型的核心原理、Matlab代码框架设计、动力学函数实现、参数调优与验证方法,并附有完整代码示例,帮助工程师和研究者快速掌握这一船舶操纵性预测的关键技术。

v6b7n8m9q0的博客 520

java springBoot搭建webService服务与调用webService

一、服务端: 1.添加依赖: <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.4.3</version> </dependency&

qq_36357608的博客 2751

以太网_RGMII接口与GMII接口的转化_03

RGMII接口转GMII接口!

weixin_42499230的博客 378

AUTOSAR进阶图解==>AUTOSAR_EXP_VFB

AUTOSAR虚拟功能总线(VFB)摘要 AUTOSAR虚拟功能总线(VFB)是汽车开放系统架构中的核心抽象概念,为分布式电子系统提供统一通信模型。VFB允许软件组件在不了解底层物理通信机制的情况下交互,通过运行时环境(RTE)实现组件间的数据交换。系统配置过程将抽象的VFB视图转换为具体实现,包括组件到ECU的映射和通信机制选择。VFB采用"last-is-best"语义进行数据通信,并支持模式管理机制,使组件能根据系统状态调整行为。此外,VFB还支持与非AUTOSAR系统的交互,通常

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1117

XML解析

一,XML概述 1.什么是XML XML即为可扩展的标记语言(eXtensible Markup Language) XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识 2.XML和HTML不同之处 XML主要用于说明文档的主题,而HTML侧重描述文本的显示格式。 XML文档数据和格式分离,文档=文档数据+文档结构+文档样式

2302_80464795的博客 1336

【AI智能体】AI 编程 + 飞书CLI + Skills 重塑开发新范式实战操作详解

AI 编程 + 飞书CLI + Skills 重塑开发新范式实战操作详解

congge 3666

C++解析XML文件

C++读取XML文件

StarWang的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

什么是xml解析?xml解析的有几种常用的解析方式?

SAX解析只能查询,不能实现增删方法,不常用,这里就不过得介绍了

superliug的博客 6133

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python解析xml

你需要。

weixin_45365818的博客 4882

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

XML解析——Java中XML的四种解析方式

XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。   XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。   针对以下XML文件,会对四种方式进行详细描述: <?xml version="1.0

qq_37272886的博客 4202

Python XML 解析

XML 指可扩展标记语言(eXtensibleMarkupLanguage)。你可以通过本站学习XML 教程XML 被设计用来传输和存储数据。XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。Python 对 XML 的解析常见的 XML 编程接口有 DOM 和 SAX,这两种接口处理 XML 文件的方式不同,当然使用场合也不同。characters(content)方法。

qq_48368964的博客 1934

XML解析(一),SAX解析XML

一、概述 SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOC解析,PULL解析(Android特有),SAX与DOC不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析XML具有速度快,占用内存少的优点,对于Android等CPU资源宝贵的移动平台来说是一个巨大的优势。 SAX的优点:解析速

宿罪的博客 3万+

perl 解析xml_使用Perl的高级XML解析技术

对于种类繁多的Perl应用程序,选择的XML工具是XML::Simple ,这是本系列第1部分的主题(请参阅参考资料 )。 XML::Simple将XML输入文件转换为易于操作的Perl数据结构,并将这些数据结构写回XML。 但是请记住,这种方法在某些情况下不起作用。 当您需要在内存中构建XML文档的表示形式,然后以相当复杂或不可预测的方式搜索或转换XML文档时, XML::Simple并...

cuyi7076的博客 2296

java解析XML

概念:x(extensible)可扩展的 M(markup)标记/节点 L(language)语言 -->可扩展的标记语言. 一、XML语言的作用 1、存:特殊的文件,单级游戏里的等级和装备存到XML文件中 2、传:网络上传递数据 3、配置文件 二、XML文件的特点 跨平台性 多语言都支持XML语言 XML具有自我描述性:所有节点(元素)自定义 三、XML的语法规则 要有根节点,只能有一个 节点要有开始和结束<节点名...

asddasddeedd的博客 3922

php怎么解析xml,php解析xml方法实例详解

本文以实例形式详细讲述了php解析xml方法。分享给大家供大家参考。具体分析如下:books.xml文件如下:Harry PotterJ K. Rowling200529.99Everyday ItalianGiada De Laurentiis200530.00Learning XMLErik T. Ray200339.951、DOM解析XML//创建一个DOMDocument对象$doc=ne...

weixin_34135180的博客 2834

xml文件解析 (DOM4J解析XML) -java

文章目录前言一、本地XML解析1、导包并配置1、在项目下新建lib文件夹,并把jar包导入。2、更改项目配置2、编写一个简单的本地XML文件3、解析本地XML文件:二、解析网络上的XML文件1.网址:2、来解析此网络XML文件总结 前言 今天,我们对xml文件进行解析。分别对本地的xml文件和网络上的xml文件进行解析。 提示:以下是本篇文章正文内容。 一、本地XML解析 1、导包并配置 1、在项目下新建lib文件夹,并把jar包导入。 2、更改项目配置 接下来 选中添加刚才创建的Libr

qq_43783709的博客 3371
上一篇: XML约束
下一篇: JDBC自定义XML
enterpc
博客等级 码龄20年 58粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值