天天挂茶馆

huangtiandi 发表于 2019-2-24 13:40:30

xml详解

本帖最后由 huangtiandi 于 2019-2-24 13:50 编辑

说明:

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


xml简介

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

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

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


xml的基本书写

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

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

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


java读取xml数值


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


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


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


一个简单的xml文件
<?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>



使用java读取xml的数值
      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());
                }
               
      }




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

      public static void main(String[] args) throwsException
      {
               //创建(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());
                }
      }



未完待续


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













页: [1]
查看完整版本: xml详解