| 
 | 
 
 本帖最后由 huangtiandi 于 2019-2-24 13:50 编辑  
 
说明: 
 
本文只讲解xml在java中使用,概念性的东西比较少,在java中的应用例子较多,适合有一定xml基础的人群 
 
 
xml简介 
 
 XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息,也就是单个XML本身是没有功能的,是 
 
必须被其它东西使用才有意义 
 
XML 仅仅是纯文本,任何有能力处理纯文本的软件都可以处理 XML 
 
 
xml的基本书写 
 
1 需要注意的是大于号和小于号以及&(与符号)都不能直接使用 
 
小于号用(<)代替 大于号用(>)代替 &用 (&) 代替,他们后面都有分号 
 
2 属性值必须要用双引号包围 
注:下面的   呵呵< </孙元素>  呵呵后面的小于号应该用<代替  
[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 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |   
 
 
 
 |