XML解析

前言

前面的博客中虽然有讲解xml解析,现在再详细的介绍xml解析

1.java中配置文件的三种配置位置及读取方式

1.1 XML和*.properties(属性文件)

这两种方式是随处可见的,xml的两大作用:数据交互、做配置
作用1:数据交互(json&xml)
json的几种格式( [ ]:代表数组,{ }:代表对象):
json对象:

{id:1,name:'zs',sex:'nv'}
	json数组:
[ {id:1,name:'zs',sex:'nv'}.{id:2,name:'ls',sex:'nan'} ]
	混合对象:
[{id:1,name:'zs',sex:'nv',children:{id:3,name:'zsf',sex:'nv'}}.{id:2,name:'ls',sex:'nan' children:[ {id:3,name:'zsf',sex:'nv'},{id:3,name:'zsf',sex:'nv'} ] } ]

xml的体现形式

   对象:
<person>
		<id>1</id>
		<name>zs</name>
		<sex>nv</sex>
	</person>
   数组:

<persons>
		<person>
			<id>1</id>
			<name>zs</name>
			<sex>nv</sex>
		</person>
		<person>
			<id>2</id>
			<name>zs2</name>
			<sex>nan</sex>
		</person>
	</persons>
小总结:在数据交互中,json格式与xml相比较,拿数组体现形式来说,
肯定是json的形式比较方便,简洁,没有xml那么麻烦,减少了很多代码,
他们的作用是一样的,但表现形式不一样,json格式的字节用的比较少,传输数据的大小决定着传输数据的速率
所以xml的体现形式相对于json来说已经淘汰了,广泛的流行json的方式

作用1:做配置(mvc.xml)

	<comfig>
		<action name="" type="">
			<forward result="xx">/xxx.jsp</forward>
		</action>
	</config>

1.2 存放位置

1.2.1 src根目录下

      Xxx.class.getResourceAsStream("/config.properties"); 

现在我们来看一个案例:
第一步:导入架包
在这里插入图片描述
第二步:导入所需要的文件(放入conf源文件夹下)
如图所示:
在这里插入图片描述
db.properties文件中的内容:
在这里插入图片描述
第三步:建类来实现
在这里插入图片描述
得到的结果为:
在这里插入图片描述

1.2.2 与读取配置文件的类在同一包

      Xxx.class.getResourceAsStream("config2.properties");

现在我们来看案例:
第一步:导入架包
在这里插入图片描述
第二步:导入所需要的文件(放入同包下)
如图所示:
在这里插入图片描述
db.properties文件中的内容:
在这里插入图片描述
第三步:建类来实现
在这里插入图片描述
得到的结果为:
在这里插入图片描述

1.2.3 WEB-INF(或其子目录下)

  ServletContext application = this.getServletContext();//获取上下文
  InputStream is =application.getResourceAsStream("/WEB-INF/config3.properties");

现在我们来看案例:
第一步:导入架包
在这里插入图片描述
第二步:导入所需要的文件(放入WEB-INFO下)
如图所示:
在这里插入图片描述
db.properties文件中的内容:
在这里插入图片描述
第三步:建类来实现
在这里插入图片描述
得到的结果为:
在这里插入图片描述

注1:*.properties文件
key=value(键值对的形式存放数据)
#注释
Properties.load(is)

2.dom4j+xpath解析xml文件

2.1 利用dom4j解析xml文件

现在我们来看一个案例来理解dom4j是如何解析xml文件的

案例:

 * 明确需求:
 * 	要获取到名字为小芳,id=s002的学生信息,然后在控制台进行打印
 * 
 * 期望结果:
 * 	sid=s002,name=小芳

 * 分析得出具体的实现步骤:
 * 1.加载资源文件
 * 2.解析得到所有的student标签
 * 3.遍历得到每一个student标签xml内容
 * 4.判断该student的sid是否是s002
 * 5.如果是那么进一步解析该student标签下面的子标签name
 * 6.一并打印sid以及name值

第一步:导入架包在这里插入图片描述
第二步:导入所需的xml文件(我这里用的是students.xml)
在这里插入图片描述
students.xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student sid="s001">
		<name>小明</name>
	</student>
	<student sid="s002">
		<name>小芳</name>
	</student>
	<student sid='s003'>
		<name>小王</name>
	</student>
</students>

第三步:根据分析的思路来写代码(代码中的注释基本上都很详细了,不懂的,欢迎在下面评论!)

public class Demo3 {
	public static void main(String[] args) throws Exception {
		//1.获取到待解析的资源文件
		//2.利用Dom4j进行解析
		
		//步骤1:加载资源文件
		InputStream in = Demo3.class.getResourceAsStream("/students.xml");
		SAXReader reader=new SAXReader();
		//步骤2:解析得到所有的student标签
		Document doc = reader.read(in);
		//输出查看是否已经得到所有的student标签
		//System.out.println(doc.asXML());
		List<Element> stuEles = doc.selectNodes("/students/student");
		//步骤3:遍历得到每一个student标签xml内容
		for (Element stuEle : stuEles) {
			//步骤4:判断该student的sid是否是s002
			if("s002".equals(stuEle.attributeValue("sid"))) {
				//System.out.println(stuEle.asXML());
				//System.out.println("--------------------");
				//步骤5:如果是那么进一步解析该student标签下面的子标签name
				Element nameEle=(Element)stuEle.selectSingleNode("name");
				//System.out.println(nameEle.asXML());
				//一并打印sid以及name值
				System.out.println("sid="+stuEle.attributeValue("sid")+",name="+nameEle.getText());
			}
			
		}
		
	}
	
}

第四步:查看结果(这就是我们所要的结果)
在这里插入图片描述

2.1 利用xpath解析xml文件

现在我们来看一个案例来理解xpath是如何解析xml文件的

案例:

 * 明确需求:
 * 	要获取到名字为小芳,id=s002的学生信息,然后在控制台进行打印
 * 
 * 期望结果:
 * 	sid=s002,name=小芳

 * 分析得出具体的实现步骤:
 * 1.加载资源文件
 * 2.解析得到所有的student标签
 * 3.遍历得到每一个student标签xml内容
 * 4.判断该student的sid是否是s002
 * 5.如果是那么进一步解析该student标签下面的子标签name
 * 6.一并打印sid以及name值

第一步:导入架包在这里插入图片描述
第二步:导入所需的xml文件(我这里用的是students.xml)
在这里插入图片描述
students.xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student sid="s001">
		<name>小明</name>
	</student>
	<student sid="s002">
		<name>小芳</name>
	</student>
	<student sid='s003'>
		<name>小王</name>
	</student>
</students>

第三步:根据分析的思路来写代码

/**
 *  明确需求:
 * 	要获取到名字为小芳,id=s002的学生信息,然后在控制台进行打印
 * 
 * 期望结果:
 * 	sid=s002,name=小芳
 * 
 * @author 晴sister
 *
 * https://i.csdn.net/#/uc/profile
 */
public class Demo4 {
public static void main(String[] args) throws Exception {
			//步骤1:加载资源文件
			InputStream in = Demo3.class.getResourceAsStream("/students.xml");
			SAXReader reader=new SAXReader();
			//步骤2:解析得到所有的student标签
			Document doc = reader.read(in);
			Element stuEles002=(Element)doc.selectSingleNode("/students/student[@sid='s002']");
			//System.err.println(stuEles002.asXML());
			Element stuEleName=(Element)stuEles002.selectSingleNode("name");
			System.out.println("sid="+stuEles002.attributeValue("sid")+",name="+stuEleName.getText());
}
}

第四步:查看结果(这就是我们所要的结果)
在这里插入图片描述

3.总结:

3.1 数据交互的方式(json&xml)

在数据交互中,json格式与xml相比较,拿数组体现形式来说,
肯定是json的形式比较方便,简洁,没有xml那么麻烦,减少了很多代码,
他们的作用是一样的,但表现形式不一样,json格式的字节用的比较少,传输数据的大小决定着传输数据的速率
所以xml的体现形式相对于json来说已经淘汰了,广泛的流行json的方式

3.2 dom4j&xpath解析xml文件

从上面的案例中我们可以看出,这两种方式哪种更简洁,并且更加的方便的去解析xml文件?
从代码的简洁方面我们可以看出使用xpath解析更加的方便我们去解析xml文件,代码的功能xpath有些可以一步到位,而dom4j相当于来说比较繁琐,所以一般建议使用xpath解析去解析xml文件

好了,今天先分享到这里!
不怕报错就怕不报错的小白欢迎下次光临!
希望我的博客能够帮助到您!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值