• 16.xml


    一、xml

    1.什么是XML:
    是一种可扩展的标记语言,所有标记都可以自定义,常用来做配置文件和数据传输的载体
    2.语法:
    标签(元素):<元素名> 值 </元素名>
    属性:在元素中 <元素名 属性名="值" 属性名="值" ...></元素名>
    注意:元素可以嵌套,但不能交叉

    补充:字符集编码
    gbk,gb2312:这两种都是支持中文编码的
    iso-8859-1:这是计算机默认的纯英文字符集编码
    utf-8:国际字符集编码,也支持中文

    xml注释:<!-- 注释内容 -->

    3.dtd文档
    作用是对xml文档的一个约束,可以直接写在xml文档中,也可以写外部文件中然后被引用
    4.dtd语法:
    PCDATA和CDATA的区别:他们都是dtd中的数据类型,PCDATA用来修饰元素会被解析,CDATA用来修饰属性不会被解析
    符号:
    *:表示任意匹配次数
    +:1到多次
    ?:0-1次匹配
    #REQUIRED:表示该属性必须出现
    5.外部dtd文件的引入
    a.系统内部引用,只能在当前系统,关键字:SYSTEM
    <!DOCTYPE students SYSTEM "student.dtd">
    b.公共引用,是通过网络,关键字:PUBLIC
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">


    <!DOCTYPE students[
      <!ELEMENT students (student+)>
      <!ELEMENT student (name,gender,age,address)>
      <!ATTLIST student xh CDATA #REQUIRED>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT gender (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      <!ELEMENT address (city,street,zip)>
      <!ELEMENT city (#PCDATA)>
      <!ELEMENT street (#PCDATA)>
      <!ELEMENT zip (#PCDATA)>
    ]>

    练习:
    1.请写一个xml用来描述老师的信息
    要求符合语法,能用浏览器渲染


    2.写一个dtd文件
    要求:
    根元素是books
    books元素下可以有1个或者多个book元素
    book元素有bookid属性,并且必须出现
    book元素下有 name,price,count,addr元素
    addr元素可以为任意次数
    addr元素下有 city,street元素

    二.对于xml文档的解析与创建
    1.解析就是将xml文档的内容读取到程序中
    2.创建就是将程序中的数据封装到xml文件中

    Dom解析过程:
    把整个xml文档看做一个Document对象
    xml文档中的所有元素包括标签和属性都称为节点(Node对象)
    Node对象可以分为Element(元素)和Attribute(属性)
    所有的数据对象是Text
    1.解析过程
    先获取document对象,再获取根节点,再一层层获取子节点

    2.创建xml的过程
    先创建一个document对象,再创建根节点,再创建所有的子节点,再把所有的子节点追加到相应的父节点,最后把文档对象输出

    三、例子

      student.dtd

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!ELEMENT students (student+)>
     3     <!ELEMENT student (age,sex,phone,addr)>
     4     <!ATTLIST student id CDATA #REQUIRED>
     5     <!ELEMENT addr (contry,city,street)>
     6     <!ELEMENT age (#PCDATA)>
     7     <!ELEMENT sex (#PCDATA)>
     8     <!ELEMENT phone (#PCDATA)>
     9     <!ELEMENT contry (#PCDATA)>
    10     <!ELEMENT city (#PCDATA)>
    11     <!ELEMENT street (#PCDATA)>

      student.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!-- <!DOCTYPE students[
     3     <!ELEMENT students (student+)>
     4     <!ELEMENT student (age,sex,phone,addr)>
     5     <!ATTLIST student id CDATA #REQUIRED>
     6     <!ELEMENT addr (contry,city,street)>
     7     <!ELEMENT age (#PCDATA)>
     8     <!ELEMENT sex (#PCDATA)>
     9     <!ELEMENT phone (#PCDATA)>
    10     <!ELEMENT contry (#PCDATA)>
    11     <!ELEMENT city (#PCDATA)>
    12     <!ELEMENT street (#PCDATA)>
    13 ]> -->
    14 <!DOCTYPE students  SYSTEM  "student.dtd">
    15 <Students>
    16     <student id="001">
    17         <age>20</age>
    18         <sex>男</sex>
    19         <phone>119</phone>
    20         <addr>
    21             <contry>中国</contry>
    22             <city>长沙</city>
    23             <street>芙蓉路</street>
    24         </addr>
    25     </student>
    26     <student id="002">
    27         <age>20</age>
    28         <sex>男</sex>
    29         <phone>119</phone>
    30         <addr>
    31             <contry>中国</contry>
    32             <city>长沙</city>
    33             <street>芙蓉路</street>
    34         </addr>
    35     </student>
    36     <student id="003">
    37         <age>20</age>
    38         <sex>男</sex>
    39         <phone>119</phone>
    40         <addr>
    41             <contry>中国</contry>
    42             <city>长沙</city>
    43             <street>芙蓉路</street>
    44         </addr>
    45     </student>
    46 </Students>

      books.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <books>
     3     <book id="hwua0001">
     4         <name>java入门</name>
     5         <price>34.00</price>
     6         <count>200</count>
     7         <author>allen</author>
     8         <datetime>2017-01-01</datetime>
     9     </book>
    10     <book id="hwua0002">
    11         <name>java初级</name>
    12         <price>46.00</price>
    13         <count>104</count>
    14         <author>allen</author>
    15         <datetime>2016-11-12</datetime>
    16     </book>
    17     <book id="hwua0003">
    18         <name>java精通</name>
    19         <price>88.00</price>
    20         <count>100</count>
    21         <author>allen</author>
    22         <datetime>2017-04-11</datetime>
    23     </book>
    24     <book id="hwua0004">
    25         <name>java放弃</name>
    26         <price>10000</price>
    27         <count>300</count>
    28         <author>allen</author>
    29         <datetime>2016-05-23</datetime>
    30     </book>
    31 </books>

      xml文件读取解析实例:

     1 package com.demo1122;
     2 
     3 import java.io.FileWriter;
     4 import java.io.IOException;
     5 import java.io.Writer;
     6 
     7 import javax.xml.parsers.DocumentBuilder;
     8 import javax.xml.parsers.DocumentBuilderFactory;
     9 import javax.xml.parsers.ParserConfigurationException;
    10 
    11 import org.junit.Test;
    12 import org.w3c.dom.Document;
    13 import org.w3c.dom.Element;
    14 import org.w3c.dom.Node;
    15 import org.w3c.dom.NodeList;
    16 import org.xml.sax.SAXException;
    17 
    18 import com.sun.org.apache.xml.internal.serialize.OutputFormat;
    19 import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
    20 
    21 public class XmlDemo {
    22     @Test
    23     public void praseXml() throws Exception {
    24         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    25         DocumentBuilder db;// xml的文档构建对象
    26         db = dbf.newDocumentBuilder();
    27 
    28         Document dom = db.parse("src/com/demo1122/student.xml");// 把文件路径解析成一个document对象
    29 
    30         // 获取根节点
    31         Element root = dom.getDocumentElement();
    32         // 获取根节点下的子节点
    33         NodeList stus = root.getChildNodes();
    34         // 迭代所有子节点
    35         for (int i = 0; i < stus.getLength(); i++) {
    36             if (stus.item(i).getNodeType() == 1) {
    37                 Element stu = (Element) stus.item(i);
    38                 String id = stu.getAttribute("id");
    39                 System.out.println("id" + id);
    40                 NodeList stuAttr = stu.getChildNodes();// 继续获取子节点下的所有子节点
    41                 for (int j = 0; j < stuAttr.getLength(); j++) {
    42                     if (stuAttr.item(j).getNodeType() == 1) {
    43                         System.out.println(stuAttr.item(j).getNodeName() + "=" + stuAttr.item(j).getTextContent());
    44                     }
    45                 }
    46             }
    47         }
    48     }
    49 
    50     @Test
    51     public void createXml() throws Exception {
    52         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    53         DocumentBuilder db;// xml的文档构建对象
    54         db = dbf.newDocumentBuilder();
    55 
    56         Document doc = db.newDocument();// 创建一个新的document对象
    57 
    58         // 创建一个元素
    59         Element root = doc.createElement("animals");
    60 
    61         // 继续创建子节点,为animals的子节点
    62         Element animal = doc.createElement("animal");
    63         animal.setAttribute("id", "an1001");// 为元素设置属性
    64 
    65         // 继续为animal创建子节点
    66         Element type = doc.createElement("type");
    67         type.setTextContent("狗");// 为元素设置值
    68 
    69         Element name = doc.createElement("name");
    70         name.setTextContent("中华神犬");
    71 
    72         // 把元素之间的关系追加
    73         animal.appendChild(type);
    74         animal.appendChild(name);
    75         root.appendChild(animal);
    76         doc.appendChild(root);
    77 
    78         // 将doc写入文件
    79         // 将构建好的document输出到xml文档
    80         OutputFormat format = new OutputFormat(doc);
    81         format.setEncoding("gbk");
    82         Writer w = new FileWriter("src/com/demo1122/animals.xml");
    83         XMLSerializer xs = new XMLSerializer(w, format);
    84         xs.asDOMSerializer();// 作为DOM的方式去序列化文档
    85         xs.serialize(doc.getDocumentElement());// 输出根元素
    86         w.close();
    87     }
    88 }

      animals.xml

    1 <?xml version="1.0" encoding="gbk"?>
    2 <animals>
    3     <animal id="an1001">
    4         <type>狗</type>
    5         <name>中华神犬</name>
    6     </animal>
    7 </animals>










  • 相关阅读:
    owlsuddimatchmaker安装
    类集
    jsp基本语法
    心得思路记录下
    nyoj517 最小公倍数
    poj1250 Tanning Salon
    poj1686 Lazy Math Instructor
    poj3250 Bad Hair Day
    poj1047 Round and Round We Go
    poj2359 Questions
  • 原文地址:https://www.cnblogs.com/wlxslsb/p/10671905.html
Copyright © 2020-2023  润新知