xml详解

发布时间:2019-2-24 13:40

4664 0 0

huangtiandi

用户头衔:版主

关注 私信
回复本帖可获得 1 金钱奖励! 每人限 1 次
本帖最后由 huangtiandi 于 2019-2-24 13:50 编辑

说明:

本文只讲解xml在java中使用,概念性的东西比较少,在java中的应用例子较多,适合有一定xml基础的人群


xml简介

XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息,也就是单个XML本身是没有功能的,是

必须被其它东西使用才有意义

XML 仅仅是纯文本,任何有能力处理纯文本的软件都可以处理 XML


xml的基本书写

1 需要注意的是大于号和小于号以及&(与符号)都不能直接使用

小于号用(<)代替 大于号用(&gt)代替 &用 (&) 代替,他们后面都有分号

2 属性值必须要用双引号包围
注:下面的   呵呵< </孙元素>  呵呵后面的小于号应该用&lt;代替
[mw_shl_code=xml,true]<?xml version="1.0" encoding="UTF-8"?>
<!-- 上面必须放在第一行,encoding是编码格式,尽量使用UTF-8 -->
<根元素 属性="属性值">     
        <子元素1>元素值</子元素1>
        <子元素2>
                <孙元素>呵呵<</孙元素>
        </子元素2>
</根元素>
[/mw_shl_code]

java读取xml数值


java读取xml需要用到dom4j这个第三方包


使用的API也是对应dom4j里的,要想深入了解,可以找到dom4j的官方文档


dom4j的教程    https://www.cnblogs.com/sharpest/p/7877501.html


一个简单的xml文件
[mw_shl_code=xml,true]<?xml version="1.0" encoding="UTF-8"?>
<stus>

        <!--         给标签加属性 -->
        <stu id="100">
                <name>呵呵<</name>
                <age>10</age>
        </stu>
        
        <stu id="200">
                <name>哈哈</name>
                <age>11</age>
        </stu>
        
</stus>
[/mw_shl_code]


使用java读取xml的数值
[mw_shl_code=java,true]        public static void main(String[] args) throws Exception
        {
                 //创建(Simple aip for xml)读取对象
                 SAXReader reader1=new SAXReader();
                 
                 //指定要解析的xml在哪,注意填对路径,返回的是一个Document对象
                 //这个Document是dom4j包里的,不要导错了包
                Document document1=reader1.read(new File("src/XML_main/NewFile.xml"));
               
                //获取xml绝对路径
                System.out.println("绝对路径=="+document1.getName());
               
                //获取根元素对象
                Element rootElement=document1.getRootElement();
               
                //获取根元素的名称
                System.out.println("根元素=="+rootElement.getName());
               
                //获取子元素对象,如果想获取孙元素对象,,在element后面再加一个element("")
                //需要指定子元素对象的名称才能取到
                System.out.println("子元素=="+rootElement.element("stu"));
               
               
                System.out.println("==========================");
               
                //获取所有子元素,但不包含孙元素,也就是只获取第1层
                List<Element> elements=rootElement.elements();
                for(Element element:elements)
                {
                        //但是可以根据子元素对象获取孙元素对象
                        System.out.println(element.element("name"));
                        //获取孙元素的元素值
                        System.out.println("元素值=="+element.element("name").getText());
                        //获取属性值
                        System.out.println("属性值=="+element.attribute("id").getValue());
                }
               
        }
[/mw_shl_code]



XPath的使用

XPath能够快速定位到元素,而不需要向上面一样,假如我们只想读取孙元素的数据

那么我们需要先获取父元素,再获取子元素,然后才能获取到孙元素,XPath便能快速定位

需要添加dom4j的lib文件下的jaxen-1.1-beta-6.jar包



XPath主要需要学习的就是表达式,这里只做简单的使用

/stus/stu     /表示从根节点往下取
//stu           //表示取出所有叫stu元素的,不考虑位置,但是要使用selectNodes才能取得所有元素

XPath教程 http://www.runoob.com/xpath/xpath-tutorial.html

[mw_shl_code=java,true]        public static void main(String[] args) throws  Exception
        {
                 //创建(Simple aip for xml)读取对象
                 SAXReader reader1=new SAXReader();
                 
                 //指定要解析的xml
                Document document1=reader1.read(new File("src/XML_main/NewFile.xml"));
               
                //获取根元素
                Element rootElement=document1.getRootElement();
               
                //Xpath,能快速定位到节点,但是还是需要添加jar包,在domj4的lib里jaxen-1.1-beta-6.jar
                //找到元素后返回的是Node类型,我们可以强转成Element,节点就是元素
                //selectSingleNode是只取第一个节点(元素)
                //   /stus/stu     /表示从根节点往下取
                //   //stu           //表示取出所有叫stu元素的,不考虑位置,但是要使用selectNodes才能取得所有元素
                Element nameElement=(Element) rootElement.selectSingleNode("//name");
                System.out.println(nameElement.getText());
               
                System.out.println("===============");
                //获取所有节点(元素)
                List<Element> list1=rootElement.selectNodes("//name");
                for(Element element:list1)
                {
                        System.out.println(element.getText());
                }
        }
[/mw_shl_code]


未完待续


摘自我的原文  https://blog.csdn.net/yzj17025693/article/details/87812877













B Color Smilies

扫码加入QQ群

842848001@qq.com
842848001

GMT+8, 2024-10-13 02:57

Powered by Discuz! X3.4© 2001-2017 Comsenz Inc.

网站内容仅供用于学习和交流,请遵循相关法律法规

QQ在线咨询|手机版|挂茶馆易语言论坛 ( 蜀ICP备15031375号 )