XML解析
来源:互联网 发布:mac desktop pictures 编辑:程序博客网 时间:2024/05/18 14:26
1.XML解析
<?xml version="1.0" encoding="utf-8"?><!--首行是xml的声明 --><country name="中国"> <!-- 写在标签内的是标签的属性 --> <province name="湖南" id="01"> <capital>changsha</capital> <!-- 写在标签开始结尾内的是标签的文本 --> <area>30</area> <population>1000</population> </province> <province name="湖北" id="02"> <capital>wuhan</capital> <area>35</area> <population>2000</population> </province> <province name="广东" id="03"> <capital>广州</capital> <area>40</area> <population>3000</population> </province></country><!-- 这是xml的注释 --><!-- 标签: xml文件包括标签和属性,标签本身可以有属性,如province的name属性,同时标签可以有子标签,比如province的子标签有capital,area,population等,转义字符: < < > > " " & & 空格 &nsbp; --><!-- CDATA块:作用: 可以让一些需要进行包含特殊字符的内容统一进行原样输出。--><!-- xml解析方法:DOM:Dom4J(使用广泛,不在jdk中,dom4j-1.6.1.jar), JAXP (oracle-Sun公司官方) DOM解析原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树, 通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。SAX:Sax解析工具(oracle-sun公司官方)-->
package p01;import java.io.File; import java.util.Iterator;import java.util.List; import org.dom4j.Attribute;import org.dom4j.Element;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class Demo1 {public static void main(String[] args) throws DocumentException {//showXml();//showXmlParams();//showXmlAttr();//showXmlEle();//showXmlAll();//SAXReader reader = new SAXReader();//Document document = reader.read(new File("./src/country.xml"));//Element rootEle = document.getRootElement();//getNodes(rootEle);showAll();}private static void showAll() throws DocumentException {SAXReader reader = new SAXReader();Document document = reader.read(new File("./src/country.xml"));Iterator<Element> it = document.getRootElement().elementIterator("province");while(it.hasNext()){Element ele = it.next();Province pro = new Province();pro.setCapital(ele.elementText("capital"));pro.setArea(ele.elementText("area"));pro.setPopulation(ele.elementText("population"));System.out.println(pro.toString());}}/** * 递归显示所有的节点 * */private static void getNodes(Element ele) { System.out.println(ele.getName()+"###"+ele.getText());Iterator<Node> it = ele.nodeIterator();while(it.hasNext()){Node node = it.next();if(node instanceof Element){getNodes((Element)node);}}}/** * 显示所有的节点 * 节点node分为标签(Element,)属性,文本,只有标签包含子节点,其余两个没有 * */private static void showXmlAll() throws DocumentException {SAXReader reader = new SAXReader();Document document = reader.read(new File("./src/country.xml"));Iterator<Node> it = document.nodeIterator();while(it.hasNext()){Node node = it.next();System.out.println(node.getName()+"!!!!" +node.getText() );}}/** * 获取xml文件的节点标签 * 获取节点之后,才能进一步获取对应的属性,文本(无子标签时一般包含文本值) * @throws DocumentException * */private static void showXmlEle() throws DocumentException { SAXReader reader = new SAXReader();Document document = reader.read(new File("./src/country.xml"));Element rootEle = document.getRootElement();System.out.println("根标签的名字:"+rootEle.getName());//得到根标签下的指定名称的第一个子标签Element ele1 = rootEle.element("province");System.out.println(ele1.elementText("capital")+"--"+ele1.elementText("area")+"--"+ele1.elementText("population"));System.out.println("-----------------");//得到根标签下的指定名称的所有子标签Iterator<Element> it = rootEle.elementIterator();while(it.hasNext()){Element ele = it.next();System.out.println(ele.elementText("capital")+"--"+ele.elementText("area")+"--"+ele.elementText("population"));}System.out.println("-------------");//得到根标签下的所有子标签 List<Element> list = rootEle.elements(); for (Element element : list) {System.out.println(element.getName());} System.out.println("-----------------"); //链式获取深层标签 Element ele3 = rootEle.element("province").element("population"); System.out.println(ele3.getName()+"--"+ele3.getText());}/** * 获取属性, * 获取属性前要先获取对应的节点标签 * */private static void showXmlAttr() throws DocumentException {SAXReader reader = new SAXReader();Document document = reader.read(new File("./src/country.xml"));Element ele1 = document.getRootElement().element("province");//方法1,直接获取节点的属性值String str1 = ele1.attributeValue("name");String str2 = ele1.attributeValue("id");System.out.println("方法1:"+str1 +"--------" +str2);//方法2,根据属性名获取属性对象,得到属性的属性名和属性值Attribute attr1 = ele1.attribute("name");String key1 = attr1.getName();String value1 = attr1.getValue();System.out.println("方法2:"+key1 +"--------" +value1);//方法3,得到所有属性对象返回List集合List<Attribute> list = ele1.attributes(); System.out.println("------方法3--------");for (Attribute att : list) {System.out.println(att.getName()+"=="+att.getValue());}//方法4,得到所有属性对象返回迭代器Iterator<Attribute> it = ele1.attributeIterator();System.out.println("------方法4--------");while(it.hasNext()){Attribute attr2 = it.next();System.out.println(attr2.getName()+"=="+attr2.getValue());}}/** * 获取文本 * 获取文本前先获取对应的节点标签 * */private static void showXmlParams() throws DocumentException { SAXReader reader = new SAXReader();Document document = reader.read(new File("./src/country.xml"));//Element ele = document.getRootElement().getText();String text = document.getRootElement().getText();//System.out.println("text1:" + text1);Element rootEle = document.getRootElement();//获取元素的文本,//根据元素名称获取节点,默认获取第一个Element ele1 = rootEle.element("province");String capital_1 = ele1.element("capital").getText();String area_1 = ele1.element("area").getText();String population_1 = ele1.elementText("population");//elementText相当于element()和getText()两个方法的结合System.out.println(capital_1 + "---" + area_1 + "---" + population_1); }/** * 获取文档树对象 * */private static void showXml() throws DocumentException { SAXReader reader = new SAXReader();Document document = reader.read(new File("./src/country.xml"));System.out.println(document);}}
总结:
xml的dom解析方法,操作类型分为节点,标签,属性,文本,后三者统称为节点,只有标签可以有子节点,其余二者不可以有子节点;
操作节点:可以通过获取节点的迭代器来遍历
操作标签:可以获取指定名称的第一个标签,也可以获取指定名称的所有标签
操作属性:通过标签获取其属性,可以通过属性名称获取,也可以先获取属性对应,在获取属性名和属性值,
操作文本:可以通过标签获取文本,也可以通过标签名字直接获取标签的文本
阅读全文
0 0
- XML解析
- xml解析
- XML解析
- 解析XML
- xml解析
- 解析xml
- 解析xml
- xml解析
- XML解析
- xml解析
- XML解析
- xml解析
- xml解析
- xml解析
- xml解析
- xml解析
- 解析xml
- XML解析
- 单片机入门知识
- 【20171022】
- 联想G40-30进入PE鼠标键盘失灵解决方法
- [noip2014]解方程 题解
- 实例
- XML解析
- 【算法】Floyd-Warshall算法(任意两点间的最短路问题)(判断负圈)
- linux中安装nodejs
- 输入n,然后输入n个数,使它升序输出
- Java初学之HelloWord
- 内部排序算法
- plsql 编程入门基础
- Apache Http Server2.4的常用命令及安装步骤
- Android Binder 原理实例分析(讲的不错)