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文件
好了,今天先分享到这里!
不怕报错就怕不报错的小白欢迎下次光临!
希望我的博客能够帮助到您!