XML作用及存放位置
xml的具体作用有两种:
1.数据交互【主要有三种1.XML,2.WEBService,3.json(XML 基本淘汰,一般用json)】
2.做配置 表现形式为:
<config>
<action name=" " type=" ">
<forward result=''xx">/xxx.jsp</forward>
</action>
</config>
存放位置
存放位置
:
1.src根目录下 2.与读取配置文件的类在同包 3.WEB-INF(或其子目录下)
XML与json交互
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交互形式:
json:对象形式:{id:1,name:'zs',sex:'nv'}
json数组形式:【{id:1,name:'zs',sex:'nv'},{id:2,name:'ls',sex:'name'}】
混合对象(数组内嵌对象):【{id:1,name:'zs',sex:'nv',children:{
{id:3,name:'zw',sex:'nan'}
}},{id:2,name:'ls',sex:'name'}】
混合对象(对象内嵌数组)
{id:1,name:'zs',sex:'nv',children:{
[{id:3,name:'zw',sex:'nan'},{id:2,name:'ls',sex:'name'}]
}}
解析XML
这里XML解析分为dom4j和Xpath解析
dom4j+xPath解析XML文件
XPath:等同于数据库中的select语句
dom4j:java语言专门提供的一个程序,用来解析XML
语句:
document.selectNodes(XPath);//查一组(用list集合接收在遍历输出)
document.selectSingleNode(XPath);//查单个
DOM由节点组成
1.元素节点(相当于一个标签,具体如下面代码,红色代表*元素节点*,黑色代表*属性节点*,绿色代表*文本节点*)
2.属性节点
3.文本节点
dom4j解析XML
下面将用dom4j解析上图的student.xml文件:
如果我们要得到上图name=“小王”,sid="s003"的学生信息步骤代码如下:
/**
*
*/
package com.zyang;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
/**
* dom4j+XPath解析xml
* @author SHE
*
* 2020年5月20日下午9:12:42
* com.zyang
* 具体步骤:
* 1.加载文件
* 2.解析得到所有的student
* 3.遍历得到每一个student标签xml类容
* 4.判断student的sid是否是003
* 5.如果是将进一步解析该student下的子标签name
* 6.打印name 与 sid值
*/
public class Demo4 {
public static void main(String[] args) throws Exception {
//1.获取到带解析文件
//2.利用Dom4j进行解析
InputStream is = Demo4.class.getResourceAsStream("/students.xml");
//dom4j读取类
SAXReader reader = new SAXReader();
//开始读取
Document doc = reader.read(is);
//得到students文件下的所有student(使用list集合装起来)
List<Element> stueles = doc.selectNodes("/students/student");
//fore遍历输出
for (Element stuele : stueles) {
//找到sid等于s003的元素节点
if("s003".equals(stuele.attributeValue("sid"))) {
//得到该元素节点下的name
Node nd = stuele.selectSingleNode("name");
//输出sid和name的值
System.out.println("sid="+stuele.attributeValue("sid")+","+"name="+nd.getText());
}
}
}
}
运行结果:
XPath解析XML
下面将用Xpath解析上述文件:
/**
*
*/
package com.zyang;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
/**
* XPath解析
* @author SHE
*
* 2020年5月20日下午9:57:20
* com.zyang
*/
public class Demo5 {
public static void main(String[] args) throws Exception {
//1.获取到带解析文件
//2.利用Dom4j进行解析
InputStream is = Demo4.class.getResourceAsStream("/students.xml");
//dom4j读取类
SAXReader reader = new SAXReader();
//开始读取
Document doc = reader.read(is);
//直接获取到sid为003的元素节点
Element elems= (Element) doc.selectSingleNode("/students/student[@sid='s003']");
//获取到该节点下的name
Element elem= (Element)elems.selectSingleNode("name");
//输出
System.out.println("sid="+elems.attributeValue("sid")+","+"name="+elem.getText());
}
}
运行结果:
其中Xpath直接跳过找所有元素节点和判断sid个人感觉XPath比dom4j简便快捷
’