• dom4j读取xml


    -----记录和回顾是一个比学习更重要的环节-----

    一、首先,我们需要知道xml是做什么的

    1.作为软件的配置文件

    2.作为数据的载体(小型的数据库)

    二、xml的语法

    xml文件以xml后缀名结尾。

    xml文件需要使用xml解析器去解析。浏览器内置了xml解析器。

    1.标签

    语法:<student></student>  开始标签  标签体内容  结束标签

    1<student/>  <student></student> 空标签。没有标签体内容

    2xml标签名称区分大小写。

    3xml标签一定要正确配对。

    4xml标签名中间不能使用空格

    5xml标签名不能以数字开头

    6)注意: 在一个xml文档中,有且仅有一个根标签

    2.属性

    语法: <Student name="eric">student</Student>

    注意:

    1)属性值必须以引号包含,不能省略,也不能单双引号混用!!!

    2)一个标签内可以有多个属性,但不能出现重复的属性名!!!

    3.注释

    语言: <!--  xml注释 -->

    4.文档声明

    语法: <?xml version="1.0" encoding="utf-8"?>

    version: xml的版本号

    encoding: 解析xml文件时查询的码表(解码过程时查询的码表)

    注意:

    1)如果在ecplise工具中开发xml文件,保存xml文件时自动按照文档声明的encoding来保存文 件。

    2)如果用记事本工具修改xml文件,注意保存xml文件按照文档声明的encoding的码表来保存,保证xml文件保存的码表和encoding是一致的。

    5.转义字符

    xml中内置了一些特殊字符,这些特殊字符不能直接被浏览器原样输出。如果希望把这些特殊字符按照原样输出到浏览器,对这些特殊字符进行转义。转义之后的字符就叫转义字节。

      特殊字符  转义字符

     <                &lt;

     >                &gt;

     "                 &quot;

    &                 &amp;

    空格            &nsbp;

    三、dom4j解析xml

    DOM解析原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。

     1     /**
     2      * 遍历所有节点
     3      * @throws Exception 
     4      * 
     5      */
     6     @Test
     7     public void  test2 () throws Exception{
     8                 //1.创建一个xml解析器对象
     9         SAXReader saxReader = new SAXReader();
    10         //2.读取xml文档,返回Document对象
    11         Document read = saxReader.read(new File("./src/test.xml"));
    12         Element rootElement = read.getRootElement();
    13         getElement(rootElement);
    14     }
    15     
    16     private void getElement(Element element){
    17         System.out.println(element.getName());
    18         Iterator<Node> it = element.nodeIterator();
    19         while (it.hasNext()) {
    20             Node node = it.next();
    21             if (node instanceof Element) {
    22                 Element element2 = (Element)node;
    23                 getElement(element2);
    24             }
    25         }
    26     }

    输出结果:

    students
    student
    name
    age
    student
    name
    age
    View Code

    获取属性:

     1     /**
     2      * 获取属性
     3      * @throws Exception 
     4      */
     5     @Test 
     6     public void test4() throws Exception{
     7         SAXReader saxReader =  new SAXReader();
     8         Document read = saxReader.read(new File("./src/test.xml"));
     9         Element element = read.getRootElement().element("student");
    10         String attributeValue = element.attributeValue("id");
    11         System.out.println(attributeValue);
    12         Attribute idattr = element.attribute("id");
    13         String name = idattr.getName();
    14         System.out.println("name:"+name+"
    "+"value:"+idattr.getValue());
    15         List<Attribute> idattrs = element.attributes();
    16         for(Attribute attribute : idattrs){
    17             System.out.println("name:"+attribute.getName()+"   value:"+attribute.getValue());
    18         }
    19     }

    获取单标签

     1     @Test
     2     public void test3() throws Exception{
     3         //1.读取xml文件
     4         SAXReader saxReader = new SAXReader();
     5         Document read = saxReader.read(new File("./src/test.xml"));
     6         Element rootElement = read.getRootElement();
     7 /*        System.out.println("rootElement:"+rootElement.getName());
     8         Element element = rootElement.element("student");
     9         System.out.println("element:"+element.getName());
    10         Iterator<Element> elemIt = rootElement.elementIterator("student");
    11         while(elemIt.hasNext()){
    12             Element next = elemIt.next();
    13             System.out.println(next.getName());
    14         }*/
    15         List<Element> elements = rootElement.elements();
    16         //list的三种遍历方式1.普通遍历2.强化for循环3.迭代器
    17         //1.list的普通遍历
    18 /*        for(int i = 0 ;i < elements.size();i++)
    19         {
    20             Element element = elements.get(i);
    21             System.out.println(element.getName());
    22         }*/
    23         //2.list的强化遍历
    24 /*        for(Element element :elements){
    25             System.out.println(element.getName());
    26         }*/
    27         //3.迭代器
    28 /*        Iterator<Element> it = elements.iterator();
    29         while(it.hasNext()){
    30             Element next = it.next();
    31             System.out.println(next.getName());
    32         }*/
    33         Element nameelement = read.getRootElement().element("student").element("name");
    34         System.out.println(nameelement.getName());
    35     }

    获取文本

    1     @Test
    2     public void test5() throws Exception{
    3         SAXReader saxReader = new SAXReader();
    4         Document read = saxReader.read(new File("./src/test.xml"));
    5         String text = read.getRootElement().element("student").element("name").getText();
    6         System.out.println(text);
    7     }

    demo:将test.xml文件中的内容封装在类中

    test.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <students>
     3     <student id = "001">
     4         <name>张三</name>
     5         <age>20</age>
     6     </student>
     7     <student id = "002">
     8         <name>李四</name>
     9         <age>25</age>
    10     </student>
    11 </students>

    StudentTest.java

     1 package xmlRead;
     2 
     3 public class StudentTest {
     4     public String id;
     5     public String name;
     6     public String age;
     7     public String getId() {
     8         return id;
     9     }
    10     public void setId(String id) {
    11         this.id = id;
    12     }
    13     public String getName() {
    14         return name;
    15     }
    16     public void setName(String name) {
    17         this.name = name;
    18     }
    19     public String getAge() {
    20         return age;
    21     }
    22     public void setAge(String age) {
    23         this.age = age;
    24     }
    25     
    26     @Override
    27     public String toString() {
    28         return "id:"+this.id +"  name:"+this.name+"     age:"+this.age;    
    29     }
    30 }

    readStudent类

     1 public class ReadStudent {
     2     public static void main(String[] args) throws Exception {
     3         SAXReader saxReader = new SAXReader();
     4         Document doc = saxReader.read(new File("./src/test.xml"));
     5         Element rootElement = doc.getRootElement();
     6         Iterator<Element> eleIt = rootElement.elementIterator();
     7         while (eleIt.hasNext()) {
     8             Element element = eleIt.next();
     9             StudentTest student = new StudentTest();
    10             student.setId(element.attributeValue("id"));
    11             student.setName(element.elementText("name"));
    12             student.setAge(element.elementText("age"));
    13             System.out.println(student.toString());
    14         }
    15     }
    16 }

    输出结果:

    id:001  name:张三     age:20
    id:002  name:李四     age:25
    View Code

    读取一个完整的test.xml文件(仅读内容)

     1 /**
     2  * 读取一个完整的xml文件。
     3  * @author ihome
     4  *
     5  */
     6 public class readXMl {
     7     @Test
     8     public void test() throws Exception{
     9         SAXReader saxReader = new SAXReader();
    10         Document read = saxReader.read(new File("./src/test.xml"));
    11         Element rootElement = read.getRootElement();
    12         StringBuffer sBuffer = new StringBuffer();
    13         getElementCild(rootElement,sBuffer);
    14         System.out.println(sBuffer.toString());
    15     }
    16     private void getElementCild(Element element,StringBuffer sBuffer){
    17         sBuffer.append("<"+element.getName());
    18         List<Attribute> attributes = element.attributes();
    19         for(Attribute attribute:attributes){
    20             sBuffer.append(" "+attribute.getName()+" = "+attribute.getValue());
    21         }
    22         sBuffer.append(">");
    23         sBuffer.append(element.getText());
    24         Iterator<Element> eleIt = element.elementIterator();
    25         while(eleIt.hasNext()){
    26             Element next = eleIt.next();
    27             getElementCild(next,sBuffer);
    28         }
    29         sBuffer.append("</"+element.getName()+">");
    30     }
    31 }
  • 相关阅读:
    [INS-32033] Central Inventory location is not writable
    ORACLE中的PL/SQL
    Oracle几大后台进程
    2016年中山市信息学竞赛暨全国信息学联赛成绩表(普及组)
    NOIP复习资料——往年习题精选
    迪杰斯特拉dijkstar(算法个人观点)
    【USACO题库】1.4.2 The Clocks时钟.TJ
    【USACO题库】2.1.2 Ordered Fractions顺序的分数.tj
    纪中2016.10.6比赛不明总结
    纪中2016.8.17比赛不明总结
  • 原文地址:https://www.cnblogs.com/wy0904/p/7722232.html
Copyright © 2020-2023  润新知