XML(eXtensible Markup Language)

XML


 

一、XML简介:

  • 1.是一种标记语言
  • 2.xml是一种非常灵活的语言,没有固定的标签,所有标签都可以自定义
  • 3.xml用于信息的记录和传递,经常用于配置文件

 

二、XML格式:

  • 1.声明信息,用于描述xml的版本和编码方式      <?xml version="1.0" encoding="UTF-8"?>
  • 2.有且仅有一个根元素
  • 3.大小写敏感
  • 4.标签是成对的,而且要正确嵌套
  • 5.属性值要使用双引号
  • 6.注释       <!-- -->
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!-- 这里是注释 -->
 3 
 4 <books>
 5     
 6     <book id="b01">
 7         <name>java高级编程</name>
 8         <author>李四</author>
 9     </book>
10     <book id="b02">
11         <name>java中级编程</name>
12         <author>王二</author>
13     </book>
14     
15 </books> 

 

 

DTD


 

一、简介:

  • 1.DTD,document Type Definition ,文档类型定义
  • 2.DTD,用于约束xml的文档格式,保证xml是一个有效的
  • 3.DTD分为两种,内部、外部

 

二、内部DTD使用:

  • 1.内部DTD定义:<! DOCTYPE  根元素  [元素声明]>
  • 2.元素声明语法:<!ELEMENT 元素名 (子元素[,子元素....])>
  • 3.数量词:

  +  : 表示出现1次或多次,至少一次

  ? :表示出现0次或1次

   * :表示出现任意次

  • 4.属性声明语法: <!ATTLIST  元素名称  属性名称  属性类型  默认值>

    属性类型: CDATA ,表示字符数据(character  data)

    默认值    :

          -- #REQUIRED , 表示必须出现

             -- #IMPLIED ,表示不是必须的

三、带DTD格式的完整XML

<?xml version="1.0" encoding="UTF-8"?>
<!-- 声明内部DTD -->
<!DOCTYPE scores [
    <!ELEMENT scores (student*) >
    <!ELEMENT student (name, course)>
    <!ATTLIST student id CDATA #REQUIRED>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT course (#PCDATA)>
]>
<scores>
    
    <student id="1">
        <name>张三</name>
        <course>java</course>
    </student>
    
    <student id="2">
        <name>王二</name>
        <course>sql</course>
    </student>
    <student id="3">
        <name>李四</name>
        <course>xml</course>
    </student>
</scores> 

四、外部DTD使用:

   1.创建一个独立的DTD文件

<?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT scores (student*) >
    <!ELEMENT student (name, course)>
    <!ATTLIST student id CDATA #REQUIRED>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT course (#PCDATA)>

 

2.在xml中引入外部DTD文件

<!-- 引入外部DTD文件 -->
<!DOCTYPE scores SYSTEM "scores.dtd">

 

 

 XML解析


 

一、XML的解析:

对xml文件进行操作,包括创建xml,对xml文件进行增删改查操作

  • 1.DOM解析:是官方提供的解析方式 , 基于xml树解析的 ;比较耗资源,适用于次访问XML
  • 2.SAX解析:民间解析方式, 基于事件的解析;适用于数据量较大的XML
  • 3.JDOM解析:第三方提供,开源免费解析方式,比DOM解析快
  • 4.DOM4J解析:第三方提供,开源免费,JDOM升级版

 

二、DOM4J解析XML

/**
 * 解析xml文件
 * @author Administrator
 *
 */
public class TestXml {
    public static void main(String[] args) throws Exception {
        //1.创建SAXReader对象,用于读取xml文件
        SAXReader reader = new SAXReader();
        //2.读取xml文件,得到Document对象
        Document doc = reader.read(new File("src/scores.xml"));
        //3.获取根元素
        Element root = doc.getRootElement();
        //4.获取根元素下所有子元素
        Iterator<Element> it = root.elementIterator();
        while(it.hasNext()) {
            //取出元素
            Element e = it.next();
            System.out.println(e.getName());
            //获取id属性
            Attribute id = e.attribute("id");
            System.out.println(id.getName()+"="+id.getValue());
            //获取子元素
            Element name = e.element("name");
            Element course = e.element("course");
            //打印
            System.out.println(name.getName()+"="+name.getStringValue());
            System.out.println(course.getName()+"="+course.getText());
            System.out.println("------------");
        }
    }
}

 

三、生成XML文件:

/**
 * 生成xml文件
 * @author Administrator
 *
 */
public class TestXml2 {
    public static void main(String[] args) throws Exception {
        //1.通过DocumentHelper生成一个Document对象
        Document doc = DocumentHelper.createDocument();
        //2.添加并得到根元素
        Element root = doc.addElement("books");
        //3.为根元素添加子元素
        Element book = root.addElement("book");
        //4.为book元素添加属性
        book.addAttribute("id", "1");
        //5.为book添加子元素
        Element name = book.addElement("name");
        Element author = book.addElement("author");
        //6.为元素添加文本
        name.addText("java高级");
        author.addText("张三");
        //7.输入
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter writer = new XMLWriter(new FileWriter(new File("src/book2.xml")),format);
        writer.write(doc);
        //释放资源
        writer.close();
        
    }
}

 

posted @ 2020-03-05 16:20  华哥好棒棒  阅读(273)  评论(0编辑  收藏  举报