JavaSE之XML
admin
2024-01-29 21:50:53
0

目录

  • XML概念
  • XML的作用
    • XML约束介绍
    • XML的两种约束
  • XML的解析
    • 两种解析方式
  • dom4j解析XML
  • XPath介绍
  • 最后

XML概念

XML的全称为(eXtensible Markup Language),是一种可扩展的标记语言。

标记语言:通过标签来描述数据的一门语言

可扩展:标签的名字是可以自定义的

XML的作用

XML被设计用来存储和传输数据。

不同软件之间进行数据传输。

存储数据供软件使用。

XML组成-文档声明格式


version:版本号,该属性是必须存在的

encoding:文件编码,该属性不是必须的(一般取值都是UTF-8)

文档声明必须是XML第一行

注释


标签

cat

属性


实体字符

< 是 < ;>是> ;

1<22>1

字符数据区

快捷键:CD

1]]>

注意事项:

1.标签要成对出现,有前有后,后面的多一个斜杠

2.如果中间没有内容,可以在前面的标签上加上/表示提前结束这个标签

3.不要有嵌套标签

4.最外层只能有一个根标签

5.有些特殊字符需要转义,或者使用CD转义字符区标记

cat18
地球
1<22>11]]>

XML约束介绍

因为XML文件的标签和属性可以随意扩展,通过XML约束来限定XML文件中可使用的标签以及属性。

XML的两种约束

DTD约束,比较简单,功能相对弱

Schema,比较复杂,功能相对强

XML的解析

XML的解析就是读取XML中的数据

两种解析方式

SAX解析

DOM解析

DOM解析原理

一次性读取XML中的所有数据,在内存中形成一颗DOM树

dom4j解析XML

Person类

public class Person {private int id;private boolean vip;private String name;private String gender;private String email;public Person() {}public Person(int id, boolean vip, String name, String gender, String email) {this.id = id;this.vip = vip;this.name = name;this.gender = gender;this.email = email;}

将数据解析并存入List

// 我要经常得到XML的数据
// 1.每次都解析,效率低,代码很繁琐
// 2.解析一次,把得到的数据保存到对象中,以后只要获取对象中的数据
public class Demo01 {public static void main(String[] args) throws DocumentException {//创建一个List将解析得到的数据存入ArrayList arrayList = new ArrayList<>();// 1.创建解析器SAXReader sr = new SAXReader();// 2.使用解析器解析XML, 在内存中形成DOM树Document document = sr.read(new File("D:\\it_workspace\\JavaSE_进阶\\study_day14\\04_解析XML\\Contact.xml"));// getRootElement: 获取根元素Element rootElement = document.getRootElement();// getName(): 获取元素名称String name = rootElement.getName();System.out.println("根元素:" + name);// element(name): 获取一个指定名称的子元素,如果有多个返回第一个Element element1 = rootElement.element("contact");System.out.println("第一个:" + element1.getName());// attributeValue(属性名): 通过属性名得到属性值String id = element1.attributeValue("id");String vip = element1.attributeValue("vip");System.out.println(id + vip);// elements(): 获取所有子元素List elements = rootElement.elements();for (Element element : elements) {System.out.println(element.getName());System.out.println(element.attributeValue("id"));System.out.println(element.attributeValue("vip"));}System.out.println("--------------------");// elements(name): 获取所有指定名称的子元素List contacts = rootElement.elements("contact");for (Element contact : contacts) {System.out.println(contact.getName());String id1 = contact.attributeValue("id");String vip1 = contact.attributeValue("vip");System.out.println(id1 + vip1);// elementText(子元素): 得到子元素的文本String name1 = contact.elementText("name");String gender = contact.elementText("gender");String email = contact.elementText("email");System.out.println(id1 + vip1 + name1 + gender + email);//数据类型转换int i = Integer.parseInt(id1);boolean b = Boolean.parseBoolean(vip1);Person person = new Person(i, b, name1, gender, email);arrayList.add(person);}System.out.println("--------------------");for (Person person : arrayList) {System.out.println(person);}}
}

XPath介绍

XPath使用路径表达式来选取XML文档中的元素节点或属性节点。节点是通过沿着路

径 (path) 来选取的。XPath在解析XML文档方面提供了一独树一帜的路径思想。

XPath使用步骤

导入jar包(dom4j和jaxen-1.1.2.jar)

通过dom4j的SAXReader获取Document对象

利用XPath提供的API,结合XPath的语法完成选取XML文档元素节点进行解析操作。

public class Demo02 {public static Document document = null;//提前加载资源且只用加载一次所以用BeforeClass@BeforeClasspublic static void testBeforeClass() throws DocumentException {//dom4jSAXReader sr = new SAXReader();//junit里的相对路劲是不带模块名的//绝对路径绝不会错document = sr.read(new File("D:\\it_workspace\\JavaSE_进阶\\study_day14\\04_解析XML\\Contact.xml"));}// XPath:绝对路径@Testpublic void test01() {// 定义 XPath 表达式:/contactList/contact/name// 调用Document对象的selectNodes()方法执行XPath获得节点List nodes = document.selectNodes("/contactList/contact/name");for (Node node : nodes) {System.out.println(node.getName()+""+node.getText());}}// XPath:相对路径, 以调selectNodes方法用者作为参照往后找@Testpublic void test02() {// 获得根节点对象Element rootElement = document.getRootElement();// 定义 XPath 表达式:./contact/name// 调用Document对象的selectNodes()方法执行XPath获得节点List nodes = rootElement.selectNodes("./contact/name");for (Node node : nodes) {System.out.println(node.getName()+node.getText());}}// XPath:全文搜索@Testpublic void test03() {// 创建XPath表达式: //nameList nodes = document.selectNodes("//name");// 调用Document对象的selectNodes()方法执行XPath获得节点// List nodes = document.selectNodes("//name");for (Node node : nodes) {System.out.println(node.getName()+":"+node.getText());}}// XPath:属性查找   //@属性名 全文搜索属性,返回的是属性对象@Testpublic void test04() {// 创建XPath表达式: //@id 获取所有的id属性// 调用Document对象的selectNodes()方法执行XPath获得节点List nodes = document.selectNodes("//@id");for (Node node : nodes) {System.out.println(node.getName()+":"+node.getText());}}// XPath:属性查找   //元素[@属性名] 查找具有指定属性名的元素@Testpublic void test05() {// 创建XPath表达式: //contact[@vip] 获取包含vip属性的contact元素// 调用Document对象的selectNodes()方法执行XPath获得节点List nodes = document.selectNodes("//contact[@id='1']");for (Node node : nodes) {Element node1 = (Element) node;System.out.println(node1.elementText("name"));System.out.println(node.getName());}}
}

最后

如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。

相关内容

热门资讯

“5元起投”贵金属交易APP虚...   掌上工美APP”宣称隶属于上海工美艺术品交易中心有限公司,但其本身并无合法交易资质。该平台通过网...
金盛贵金属APP炒黄金白银骗局...   金盛贵金属APP虚假交易,控盘走势,无资质,违规经营等等问题,该平台大肆宣传,诱导普通投资者去做...
犀贝易购APP忽悠投资者充值去...   哈尔滨贵金属交易平台旗下的APP众多,作为一家现货订购平台,平台内部的交易完全是按照期货的交易模...
熊猫淘金APP现货订购亏损被骗...   熊猫淘金APP(贵州华夏生态交易中心有限公司)投资者亏损惨重,该平台利用高杠杆、超高手续费的方式...
掌上银牛app诱导消费者充值做...   一般投资者在网上做商品现货订购交易,一些平台看似合规合法,其实这里面有投资者看不见的风险。商品现...
多家银行密集停发信用卡 图片来源:界面图库 近期,多家银行接连发布公告,宣布停止发行部分信用卡产品,涉及国有大行、股份制银行...
2026年全自动圆木推台锯市场... 引言 步入2026年,中国木材加工与建筑施工行业正经历着深刻的效率革命。随着劳动力成本持续攀升与对...
原创 房... 不知道大家有没有发现,最近身边的焦虑感越来越浓了?小区公告栏上,卖房的广告贴了又撕、撕了又贴,房东一...
GEO需求爆发 行业合力破解“... 来源:证券时报 要找一部好用的手机,以前消费者会去搜索引擎反复查询、比对,如今许多消费者会把问题抛...
我们的选择:对比了5家AI认证... 随着AI技术普及,企业对AI人才的需求日益迫切,选择一家靠谱的AI认证机构,成为企业培养AI人才、规...
高德首款具身机器人将亮相亦庄机... 封面新闻记者 吴雨佳 4月14日,记者获悉高德首款具身机器人产品将在2026亦庄机器人半马赛事上首次...
历史同期首超11万亿元!一季度... 4月14日,国新办举行新闻发布会。海关总署副署长王军介绍,今年以来,外部形势更加复杂多变,各地区各部...
高盛CEO苏德巍:对Anthr... 来源:环球网 【环球网科技综合报道】4月15日消息,据《卫报》报道,高盛首席执行官苏德巍表示,他对...
原创 一... 杭州的陈小姐收到周生生柜姐发来的微信,是一张新的价目表照片。 她看中的那颗HelloKitty转运珠...
AI竞争进入下半场:范式智能卡... 过去一年,AI行业的重心正在发生关键改变。 行业正从拼模型、拼算力的粗放式竞争,迈入拼效率、拼价值、...
一日游行情再现!“小作文”搅动... 本报(chinatimes.net.cn)记者叶青 北京报道 4月13日,多晶硅期货多个合约涨停,相...
黄金高位震荡,国际油价大跌! 黄金高位震荡,国际油价大跌!央行连续17个月增持黄金提供支撑 国际黄金 截至4月15日发稿,COM...
4人合伙买彩票中500万后起纠... 4人建微信群合伙购彩,幸运中得500余万元大奖,这本是皆大欢喜的事,却因奖金分配起纠纷闹上了法院。男...
连亏4年但营收过线,酒业“保壳... 酒类“保壳四子”中的兰州黄河即将成功“上岸”。 4月12日晚间,兰州黄河(股票名:*ST兰黄)发布2...
规模创历史同期新高!我国今年一... 4月14日,国务院新闻办公室举行新闻发布会,介绍2026年一季度进出口情况。 会上,海关总署副署长王...