XML解析

XML解析

  • 前言
  • 1.java中配置文件的三种配置位置及读取方式
    • 1.1 XML和*.properties(属性文件)
    • 1.2 存放位置
      • 1.2.1 src根目录下
      • 1.2.2 与读取配置文件的类在同一包
      • 1.2.3 WEB-INF(或其子目录下)
  • 2.dom4j+xpath解析xml文件
    • 2.1 利用dom4j解析xml文件
    • 2.1 利用xpath解析xml文件
  • 3.总结:
    • 3.1 数据交互的方式(json&xml)
    • 3.2 dom4j&xpath解析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"); 

现在我们来看一个案例:
第一步:导入架包
XML解析_第1张图片
第二步:导入所需要的文件(放入conf源文件夹下)
如图所示:
XML解析_第2张图片
db.properties文件中的内容:
XML解析_第3张图片
第三步:建类来实现
XML解析_第4张图片
得到的结果为:
XML解析_第5张图片

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

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

现在我们来看案例:
第一步:导入架包
XML解析_第6张图片
第二步:导入所需要的文件(放入同包下)
如图所示:
XML解析_第7张图片
db.properties文件中的内容:
XML解析_第8张图片
第三步:建类来实现
XML解析_第9张图片
得到的结果为:
XML解析_第10张图片

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

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

现在我们来看案例:
第一步:导入架包
XML解析_第11张图片
第二步:导入所需要的文件(放入WEB-INFO下)
如图所示:
XML解析_第12张图片
db.properties文件中的内容:
XML解析_第13张图片
第三步:建类来实现
XML解析_第14张图片
得到的结果为:
XML解析_第15张图片

注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解析_第16张图片
第二步:导入所需的xml文件(我这里用的是students.xml)
XML解析_第17张图片
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());
			}
			
		}
		
	}
	
}

第四步:查看结果(这就是我们所要的结果)
XML解析_第18张图片

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解析_第19张图片
第二步:导入所需的xml文件(我这里用的是students.xml)
XML解析_第20张图片
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());
}
}

第四步:查看结果(这就是我们所要的结果)
XML解析_第21张图片

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文件

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

你可能感兴趣的:(XML解析)