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标签。

 例如

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

 

使用实体引用:

<question> 1+1>3是否正确 question>   

xml中支持五中实体引用:

 

实体引用 对应符号 符号名称  
< < 大于
> > 小于
& &
' ' 单引号
" '' 双引号

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

方式:


  
      XXXX
   
]]>

 

其中body这一段不需要编译

 

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

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

                     XML学记笔记_第1张图片     

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

 这是一个XML文件:

xml version="1.0" encoding="UTF-8"?>
DOCTYPE hr SYSTEM "hr.dtd">
<hr>
    <employee no="3309">
        <name>张三name>
        <age>31age>
        <salary>4000salary>
        <department>
            <dname>会计部dname>
            <address>XX大厦-B103address>
        department>
    employee>

    <employee no="3310">
        <name>李四name>
        <age>23age>
        <salary>3000salary>
        <department>
            <dname>工程部dname>
            <address>xx大厦-B014<address>
        department>
    employee>

<employee no="4410"> <name>王五name> <age>28age> <salary>5000salary> <department> <dname>项目部dname> <address>xx大厦-B015address> department> employee> hr>
注意: 是引用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"?>



<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="hr.xsd">
  <employee no="3309">
     <name>张三name>
     <age>31age>
     <salary>4000salary>
     <department>
        <dname>会计部dname>
        <address>XX大厦-B103address>
     department>
  employee>

   <employee no="3310">
      <name>李四name>
      <age>23age>
      <salary>3000salary>
      <department>
         <dname>工程部dname>
         <address>xx大厦-B014<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>
        
        <sequence>
        
             <element name="employee" minOccurs="1" maxOccurs="99999">   //子节点employee
                 <complexType>
                     <sequence>
                          <element name="name" type="string">element>  //子节点name和age 
                          <element name="age" >
                              <simpleType>  //简单文本类型
                              
                                 <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>
                            
          <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 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();
    }
}

 

 

     

 

 

 


 

你可能感兴趣的:(XML学记笔记)