首页 > 代码库 > XML

XML

XML(Extensible Markup Language)

可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。

 


 

作用:

  1、数据存储

  2、数据交换

  3、作为配置文件使用

文档结构:

  文档第一行是文档说明,可以省略,但是不推荐使用。(注意:版本号和编码格式的顺序不能颠倒)

 

<?xml version="1.0" encoding="UTF-8"?>
<xml-body>

</xml-body>

 注意书写格式:

  1、XML文件的第一行必须是xml声明

  2、XML文件只能有一个根元素(如上面代码的<xml-body></xml-body>)

  3、元素要正确嵌套。

  4、区分字符的大小写。

  5、属性值的设置必须要被""包围起来。

  6、文档中的一些实体字符。(&lt--<  &gt:>)

  7、原样输出:<![CDATA[要输出的内容]]>

 


 

DTD(Document Type Definition)

文档类型定义(约束),是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。

  内部约束:(注意空格)

    1、ELEMENT: 元素节点

    2、ATT:attribute 属性

    3、#REQUIRD:必填项

    4、CDATA:(char data)字符数据(字符串)

    5、#PCDATA:(parse char data)解析字符数据

 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE student[
    <!ELEMENT students (student?)>
    <!ELEMENT student (name,age,score)>
    <!ATTLIST student id CDATA #REQUIRED>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT score (#PCDATA)>
]>
<students>
    <student id = "1404010901">
        <name>Jack</name>
        <age>18</age>
        <score>98</score>
    </student>
</students>

 

 

 

  外部约束:

XML代码:

 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE student SYSTEM "student.dtd">
<students>
    <student id = "1404010901">
        <name>Jack</name>
        <age>18</age>
        <score>98</score>
    </student>
</students>

 

 

DTD代码:

<!ELEMENT students (student?)>
<!ELEMENT student (name,age,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT score (#PCDATA)>

 


  


    

XML解析

  1、DOM:基于DOM结构树

  2、SAX:基于事件

  3、JDOM:java dom

  4、DOM4J:dom for java

  对出初学Java来说主要了解下DOM4J

  DOM4J的使用方法及步骤:

    1、在相对应的project中导入相关的jar包(dom4j-1.6.1.jar)。

    2、创建SAXReader对象,用于读取xml文件。

    3、读取xml文件。

    4、获取根节点。

    5、读取子元素。

    6、……

Java代码:

 

package com.bjsxt.test;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class TestStu2 {
    public static void main(String[] args) throws DocumentException {
        //1.创建SAXReader对象 (用于读取xml文件)
        SAXReader saxReader = new SAXReader();
        //2.读取xml文件
        Document document = saxReader.read(new File("students2.xml"));
        //3.获取根节点<students></students>
        Element stusEle = document.getRootElement();
        //4.读取子元素
        Iterator<Element> it1 = stusEle.elementIterator();
        while(it1.hasNext()){
            //获取到每个student元素 <student></student>
            Element stuEle = it1.next();
            List<Attribute> idAttrs =  stuEle.attributes();
            for(Attribute att : idAttrs){
                String aname = att.getName();
                String atext = att.getText();
                System.out.println("属性名:"+aname+"====>"+atext);
            }
            
            //获取student元素的子节点
            Iterator<Element> it2 = stuEle.elementIterator();
            while(it2.hasNext()){
                // name age score
                Element nasEle = it2.next();
                System.out.println("元素名称:"+nasEle.getName()+"====>"+nasEle.getText());
            }
        }
    }
}

 

 

 

XML代码:

 

<?xml version="1.0" encoding="utf-8"?>
<students>
    <student id="1404010901">
        <name>张三</name>
        <age>18</age>
        <score>98</score>
    </student>
    <student id="1404010902">
        <name>李四</name>
        <age>19</age>
        <score>88</score>
    </student>
</students>

 

XML