xml
xml文件格式创建
xml文件解析的几种方式
xml文件创建的格式以及要求
- 必须有XML声明语句,并且必须放在第一行
<?xml version="1.0" encoding="UTF-8" ?>
- 所有标签必须是成对的 , 有且必须只有一个根元素|根节点 , XML文件标签必须严格区分大小写
<Persons></Persons>
<Persons><persons>// 这样就是没有区分大小写,所以不是一对标签
- xml属性的值必须使用单引号或者双引号, 元素要正确嵌套
<person ID = "1"></person>
XML的解析
XML解析有四种方法
DOM方式解析
SAX方式解析
JDOM方式解析
DOM4J方式解析
- XML文件
<?xml version="1.0" encoding="UTF-8" ?>
<Persons>
<person id = "1">
<name>liuchang</name>
<age>23</age>
</person>
<person id = "2">
<name>sunjingheng</name>
<age>26</age>
</person>
<person id = "3">
<name>zhangyafeng</name>
<age>30</age>
</person>
</Persons>
- DOM方式解析
package day19;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
/*
xml解析
读取xml文件中的数据(节点名,属性,节点之间的文本)
使用DOM方式解析xml
DOM解析xml比较耗资源,适用于多次访问xml
*/
public class XMLDOMJieXiDemo01 {
public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
// 1. 创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 2. 创建一个DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
// 3. 通过DocumentBuilder的parse(...)方法得到Document对象
Document doc = db.parse("src/day19/Persons.xml");
// 4. 通过getElementsByTagName(...)方法获取得到节点的列表
// Elements 有个 s 是为了有可能得到多个节点
NodeList personList = doc.getElementsByTagName("person");
//System.out.println(person.getLength());// 当前有三个person的节点
// 所以当前要使用for循环遍历一下
// 5. 通过for循环遍历每一个节点
for (int i = 0; i < personList.getLength(); i++) {
// 6. 得到每个节点的属性和属性值
Node person = personList.item(i);
NamedNodeMap attrs = person.getAttributes();// 得到属性的集合
// 循环遍历每一个属性
for (int j = 0; j < attrs.getLength(); j++) {
// 得到每一个属性
Node id = attrs.item(j);
System.out.println("属性的名称 : " + id.getNodeName() + "\t" + id.getNodeValue());
}
}
System.out.println("\n每个节点的名和节点的值");
// 7. 得到每个节点的节点名和节点值
for (int i = 0; i < personList.getLength(); i++) {
// 得到每一个person的节点
Node person = personList.item(i);
NodeList subNode = person.getChildNodes();
System.out.println("子节点的个数 :" + subNode.getLength());
// 使用for循环遍历每一个person的子节点
for (int j = 0; j <subNode.getLength() ; j++) {
Node childNode = subNode.item(j);
//System.out.println(childNode.getNodeName());
// 判断得到的节点的类型
short type = childNode.getNodeType();// 获取节点的类型
// 判断获取的节点的类型
if (type == Node.ELEMENT_NODE){
System.out.println("节点的名称 :" + childNode.getNodeName() + "\t" + childNode.getTextContent());
}
}
}
}
}
- SAX方式解析
- JDOM方式解析
package day19;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
/*
xml解析
JDOM方式解析
这是第三方提供的解析xml的工具包
基于树型结构,利用纯Java的技术对xml文档实现解析,所以只适合Java语言
*/
public class XMLJDOMJieXiDemo03 {
public static void main(String[] args) throws IOException, JDOMException {
// 1. 创建SAXBuilder对象
SAXBuilder sb = new SAXBuilder();
// 2. 调用build方法,得到Document对象(通过IO流)
Document doc = sb.build(new FileInputStream("src/day19/persons.xml"));
// 3. 获取节点
Element root = doc.getRootElement();// Person元素
// 4. 获取根节点的直接子节点的集合
List<Element> personEle = root.getChildren();// person两个person
// 5. 遍历集合
for (int i = 0; i <personEle.size() ; i++) {
Element person = personEle.get(i);
// 得到属性集合
List<Attribute> attList = person.getAttributes();
// 遍历属性的集合得到每一个属性
for(Attribute attr : attList){
System.out.println(attr.getName() + "\t" + attr.getValue());
}
}
// 得到每一个子节点
System.out.println("--------------------------");
for (int i = 0; i < personEle.size(); i++) {
Element person = personEle.get(i);
List<Element> subperson = person.getChildren();// 得到的是节点的集合
// 遍历每一个节点,获取节点名称节点值
for(Element ele : subperson){
System.out.println(ele.getName() + "\t" + ele.getValue());
}
System.out.println("==================================");
}
}
}
- DOM4J方式解析
package day19;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.Iterator;
/*
xml解析
DOM4J是一个Java的XML API,是JDOM的升级品,用来读写XML文件的
也是只适合于Java语言
使用DOM4J需要导入DOM4J的jar包
*/
public class XMLDom4jDemo04 {
public static void main(String[] args) throws DocumentException {
// 1. 创建SAXReader对象
SAXReader reader = new SAXReader();
// 2. 调用read方法
Document doc = reader.read(new File("src/day19/persons.xml"));
// 3. 获取根元素
Element root = doc.getRootElement();
// 4. 通过迭代器遍历直接节点
for(Iterator<Element> itePerson = root.elementIterator();itePerson.hasNext();){
Element personEle = itePerson.next();
//System.out.println(personEle.getName() + "\t" + personEle.getText());
// 得到person的属性
for(Iterator<Element> subPerson = personEle.elementIterator();subPerson.hasNext();){
// 得到每一个子元素
Element subEle = subPerson.next();
System.out.println(subEle.getName() + "\t" + subEle.getText());
}
System.out.println("\n-------------------------------");
}
}
}
- jar包
提取码:poc0