xml


萬維網聯盟(W3C)

萬維網聯盟(W3C)創建於1994年,又稱W3C理事會。1994年10月在麻省理工學院計算機科學實驗室成立。建立者: Tim Berners-Lee (蒂姆·伯納斯·李)。是Web技術領域最具權威和影響力的國際中立性技術標准機構。到目前為止,W3C已發布了200多項影響深遠的Web技術標准及實施指南,

  • 如廣為業界采用的超文本標記語言HTML(標准通用標記語言下的一個應用)、

  • 可擴展標記語言XML(標准通用標記語言下的一個子集)

  • 以及幫助殘障人士有效獲得Web信息的無障礙指南(WCAG)等

xml概述  

XML的全稱為(EXtensible Markup Language),是一種可擴展的標記語言標記語言: 通過標簽來描述數據的一門語言(標簽有時我們也將其稱之為元素)可擴展:標簽的名字是可以自定義的,XML文件是由很多標簽組成的,而標簽名是可以自定義的

  • 作用

    • 用於進行存儲數據和傳輸數據

    • 作為軟件的配置文件

  • 作為配置文件的優勢

    • 可讀性好

    • 可維護性高

標簽的規則

標簽由一對尖括號和合法標識符組成

<student>

標簽必須成對出現

<student> </student>
前邊的是開始標簽,后邊的是結束標簽

特殊的標簽可以不成對,但是必須有結束標記

<address/>

標簽中可以定義屬性,屬性和標簽名空格隔開,屬性值必須用引號引起來

<student id="1"> </student>

標簽需要正確的嵌套

這是正確的: <student id="1"> <name>張三</name> </student>
這是錯誤的: <student id="1"><name>張三</student></name>

語法規則

語法規則

  • XML文件的后綴名為:xml

  • 文檔聲明必須是第一行第一列

    <?xml version=“1.0” encoding=“UTF-8” standalone=“yes”?>version:該屬性是必須存在的encoding:該屬性不是必須的

    ​ 打開當前xml文件的時候應該是使用什么字符編碼表(一般取值都是UTF-8)

    standalone: 該屬性不是必須的,描述XML文件是否依賴其他的xml文件,取值為yes/no

  • 必須存在一個根標簽,有且只能有一個

  • XML文件中可以定義注釋信息

  • XML文件中可以存在以下特殊字符

&lt; < 小於
&gt; > 大於
&amp; & 和號
&apos; ' 單引號
&quot; " 引號

 

XML文件中可以存在CDATA區

<![CDATA[ …內容… ]]>

示例代碼

<?xml version="1.0" encoding="UTF-8" ?>
<!--注釋的內容-->
<!--本xml文件用來描述多個學生信息-->
<students>

    <!--第一個學生信息-->
    <student id="1">
        <name>張三</name>
        <age>23</age>
        <info>學生&lt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;的信息</info>
        <message> <![CDATA[內容 <<<<<< >>>>>> ]]]></message>
    </student>

    <!--第二個學生信息-->
    <student id="2">
        <name>李四</name>
        <age>24</age>
    </student>

</students>
View Code

xml解析

  • 概述

    xml解析就是從xml中獲取到數據

  • 常見的解析思想

    DOM(Document Object Model)文檔對象模型:就是把文檔的各個組成部分看做成對應的對象。會把xml文件全部加載到內存,在內存中形成一個樹形結構,再獲取對應的值

常見的解析工具  

  • JAXP: SUN公司提供的一套XML的解析的API  

  • JDOM: 開源組織提供了一套XML的解析的API-jdom  

  • DOM4J: 開源組織提供了一套XML的解析的API-dom4j,全稱:Dom For Java  

  • pull: 主要應用在Android手機端解析XML  

解析的准備工作  

    1. 我們可以通過網站:https://dom4j.github.io/ 去下載dom4j  

    2. 將提供好的dom4j-1.6.1.zip解壓,找到里面的dom4j-1.6.1.jar

    3. 在idea中當前模塊下新建一個libs文件夾,將jar包復制到文件夾中

    4. 選中jar包 -> 右鍵 -> 選擇add as library即可

  • 需求

    • 解析提供好的xml文件

    • 將解析到的數據封裝到學生對象中

    • 並將學生對象存儲到ArrayList集合中

    • 遍歷集合

  • 代碼實現

<?xml version="1.0" encoding="UTF-8" ?>
<!--注釋的內容-->
<!--本xml文件用來描述多個學生信息-->
<students>

    <!--第一個學生信息-->
    <student id="1">
        <name>張三</name>
        <age>23</age>
    </student>

    <!--第二個學生信息-->
    <student id="2">
        <name>李四</name>
        <age>24</age>
    </student>

</students>

// 上邊是已經准備好的student.xml文件
public class Student {
    private String id;
    private String name;
    private int age;

    public Student() {
    }

    public Student(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

/**
 * 利用dom4j解析xml文件
 */
public class XmlParse {
    public static void main(String[] args) throws DocumentException {
        //1.獲取一個解析器對象
        SAXReader saxReader = new SAXReader();
        //2.利用解析器把xml文件加載到內存中,並返回一個文檔對象
        Document document = saxReader.read(new File("myxml\\xml\\student.xml"));
        //3.獲取到根標簽
        Element rootElement = document.getRootElement();
        //4.通過根標簽來獲取student標簽
        //elements():可以獲取調用者所有的子標簽.會把這些子標簽放到一個集合中返回.
        //elements("標簽名"):可以獲取調用者所有的指定的子標簽,會把這些子標簽放到一個集合中並返回
        //List list = rootElement.elements();
        List<Element> studentElements = rootElement.elements("student");
        //System.out.println(list.size());

        //用來裝學生對象
        ArrayList<Student> list = new ArrayList<>();

        //5.遍歷集合,得到每一個student標簽
        for (Element element : studentElements) {
            //element依次表示每一個student標簽
  
            //獲取id這個屬性
            Attribute attribute = element.attribute("id");
            //獲取id的屬性值
            String id = attribute.getValue();

            //獲取name標簽
            //element("標簽名"):獲取調用者指定的子標簽
            Element nameElement = element.element("name");
            //獲取這個標簽的標簽體內容
            String name = nameElement.getText();

            //獲取age標簽
            Element ageElement = element.element("age");
            //獲取age標簽的標簽體內容
            String age = ageElement.getText();

//            System.out.println(id);
//            System.out.println(name);
//            System.out.println(age);

            Student s = new Student(id,name,Integer.parseInt(age));
            list.add(s);
        }
        //遍歷操作
        for (Student student : list) {
            System.out.println(student);
        }
    }
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM