• XML学记笔记


    XML是一种可扩展标记语言(Extensible Markup Language)

    用途:1.java程序配置文件。 2.保存程序产生的数据。  3.网络间的数据传输。

    结构:

    1.第一行必须是XML声明

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

    说明版本与字符集方式

    2.有且只有一个根节点。

    3.书写规则与HTML相同。

    补充:

    当XML书写出现一些特殊字符有两种解决方法:1.使用实体引用。2.使用CDATA标签。

     例如

    <question> 1+1>3是否正确 </question>   //此时>会破坏文档结构

    使用实体引用:

    <question> 1+1&gt;3是否正确 </question>   

    xml中支持五中实体引用:

     

    实体引用 对应符号 符号名称  
    &lt; < 大于
    &gt; > 小于
    &amp; &
    &apos; ' 单引号
    &quot; '' 双引号

    使用CDATA标签:指的是不应由XML解析器进行解析的文本数据结构。

    方式:

    <![CDATA[
      <body>
          XXXX
       </body>
    ]]>

    其中body这一段不需要编译

    XML语义约束                                                                                                                                                     语义约束有两种方式:DTDxml schema.

       DTD(Document Type Definition) 文档类型定义  扩展名为.dtd

                              

     利用 DTD中<!ELEMENT>标签,可以定义XML文档中允许出现的节点及数量。

     这是一个XML文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hr SYSTEM "hr.dtd"><!-- 人力资源管理系统 -->
    <hr>
        <employee no="3309">
            <name>张三</name>
            <age>31</age>
            <salary>4000</salary>
            <department>
                <dname>会计部</dname>
                <address>XX大厦-B103</address>
            </department>
        </employee>
    
        <employee no="3310">
            <name>李四</name>
            <age>23</age>
            <salary>3000</salary>
            <department>
                <dname>工程部</dname>
                <address>xx大厦-B014&lt;</address>
            </department>
        </employee>

    <employee no="4410"> <name>王五</name> <age>28</age> <salary>5000</salary> <department> <dname>项目部</dname> <address>xx大厦-B015</address> </department> </employee> </hr>
    注意:<!DOCTYPE hr SYSTEM "hr.dtd"> 是引用DTD文件的意思  格式:   <!DOCTYPE 根节点 SYSTEM DTD文件路径>
    
    

     这是一个DTD文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT hr (employee+)>               //根节点hr 里面的子节点employee,employee+表示最少一个,employee*表示0到n个,employee?最多一个
    <!ELEMENT employee (name,age,salary,department)>     //子节点下的四个子节点,并且要按顺序出现
    <!ATTLIST employee no CDATA "">        //employee的no属性 使用CDATA标签
    <!ELEMENT name (#PCDATA)>               //定义标签只能是文本,#PCDATA代表文本元素
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT salary (#PCDATA)>
    <!ELEMENT department (dname,address)>   //deparatment的子节点
    <!ELEMENT dname (#PCDATA)>
    <!ELEMENT address (#PCDATA)>

      XML schema比DTD更为复杂,提供了更多的功能。它可保证xml文件中的数据类型、格式限定、数据范围。xml schema是W3C标准。

     这是一个引用schema的xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 人力资源管理系统 -->
    
    <!--  下面这段话的意思是引用 xsd文件进行约束 -->
    <hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="hr.xsd">
      <employee no="3309">
         <name>张三</name>
         <age>31</age>
         <salary>4000</salary>
         <department>
            <dname>会计部</dname>
            <address>XX大厦-B103</address>
         </department>
      </employee>
    
       <employee no="3310">
          <name>李四</name>
          <age>23</age>
          <salary>3000</salary>
          <department>
             <dname>工程部</dname>
             <address>xx大厦-B014&lt;</address>
          </department>
       </employee>
      
    
    </hr>

    这是一个xml-schema文件

    <?xml version="1.0" encoding="UTF-8"?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" >
     <element name="hr">   //根节点hr
         <!-- complexType标签的含义是复杂节点,包含子节点时必须要使用这个标签 -->
         <complexType>
            <!-- sequence的含义是里面的子节点必须按顺序前后排列 -->
            <sequence>
            <!-- minOccurs表示最少出现一次 maxOccurs表示最多99999次 对数据范围进行了约束 -->
                 <element name="employee" minOccurs="1" maxOccurs="99999">   //子节点employee
                     <complexType>
                         <sequence>
                              <element name="name" type="string"></element>  //子节点name和age 
                              <element name="age" >
                                  <simpleType>  //简单文本类型
                                  <!-- 对数值范围进行了约束,表示数值必须是整数 且在18到65之间 -->
                                     <restriction base="integer">
                                        <minInclusive value="18"></minInclusive>
                                        <maxInclusive value="65"></maxInclusive>
                                     </restriction>
                                 </simpleType>
                              </element>
                              <element name="salary" type="integer"></element>
                              <element name="department">
                                <complexType>
                                  <sequence>
                                    <element name="dname" type="string"></element>
                                    <element name="address" type="string"></element>
                                  </sequence>
                               </complexType>
                               </element>
             </sequence>
                                <!--  required表示no必须加 -->
              <attribute name="no" type="string" use="required"></attribute>   //empolyee的属性 no
                     </complexType>
                     </element>
            </sequence>
          </complexType>
     </element>
    </schema>

     以上代码需要去除//

    DOM文档对象

      DOM(Document Object Model)定义了访问和操作XML文档的标注方法,DOM把XML文档作为树结构来查看,能够通过DOM树来读写所有元素。

      我们一般使用Dom4j来实现,Dom4j是一个易用的、开源的库,用于解析XML。Dom4j将XML视为 Document对象,XML标签被Dom4j定义为Element对象。需要到DOM4j的官网下载。

      以下是一个引用Dom4j来读取XML文件的对象       

    package com.imooc.dom4j;
    
    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 HrReader {
       public void readXml() {
    //xml文件的url地址 String file
    ="d:/workplace/imooctest1/WebContent/WEB-INF/hr.xml"; //SAXReader类是读取XML文件的核心类,用于将XML解析后以“树”的形式保存在内存中 SAXReader reader=new SAXReader(); try {
    //读取文件 Document document
    =reader.read(file); //获取根节点,即hr标签。 Element root=document.getRootElement(); //elements方法用于获取指定的标签集合 List<Element> employees=root.elements("employee");
    //遍历employee子节点
    for(Element employee :employees) {
    //element方法用于获取唯一的子节点对象 Element name=employee.element("name"); String empname=name.getText();//getText()方法用于获取标签文本 System.out.println(empname); System.out.println(employee.elementText("age"));//简化写法 System.out.println(employee.elementText("salary")); Element department=employee.element("department"); System.out.println(department.element("dname").getText()); System.out.println(department.element("address").getText()); Attribute att=employee.attribute("no"); //获得employee属性no System.out.println(att.getText()); } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //执行方法 public static void main(String[] args) { HrReader hrreader=new HrReader(); hrreader.readXml(); } }

    以下是一个引用Dom4j来操作XML文件的对象

    package com.imooc.dom4j;
    
    import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class HrWriter {
      
        public void XmlWriter() {
            //获取文件位置
            String url="D:/workplace/imooctest1/WebContent/WEB-INF/hr.xml";
            SAXReader reader=new SAXReader();
            
            try {
                //读取XML文件
                Document document=reader.read(url);
                //获取根节点,即hr标签
                Element root=document.getRootElement();
                //获取根节点下的子节点 employee
                Element employee=root.addElement("employee");
                //建立子节点的属性
                employee.addAttribute("no", "4410");
                //获取子节点下的子节点 name
                Element name=employee.addElement("name");
                //建立子节点的文本 王五
                name.addText("王五");
                Element age=employee.addElement("age");
                age.addText("28");
                //同上
                Element salary=employee.addElement("salary");
                salary.addText("5000");
                //同上
                Element department=employee.addElement("department");
                Element dname=department.addElement("dname");
                dname.addText("项目部");
                Element address=department.addElement("address");
                address.addText("xx大厦-B015");
                //将此文内容转换字节流,并输入到hr.xml中。url为xml文件地址,字符集为UTF-8
                Writer writer=new OutputStreamWriter(new FileOutputStream(url),"UTF-8");
                document.write(writer);
                writer.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        public static void main(String[] args) {
            HrWriter hrwriter=new HrWriter();
            hrwriter.XmlWriter();
        }
    }

         


     

  • 相关阅读:
    hide the navigationBar and tabBar
    js
    CATranstion动画
    CASpringAnimation
    UIImageView动画
    打电话发短信
    页面滑动悬停在某个控件(两种做法)
    导航栏相关设置
    ASCII和16进制
    C++中,申请字符串数组可用new实现
  • 原文地址:https://www.cnblogs.com/tzs123/p/12026517.html
Copyright © 2020-2023  润新知