zoukankan      html  css  js  c++  java
  • xml的应用与dtd约束

    1.xml的应用

      *不同的系统之间的传输数据(qq消息传输)

      *用来表示生活中有关系的数据(省市区的包含关系)

      *经常用在文件配置

         **比如现在连接数据库,肯定知道数据库的名称和密码及用户名。

            **如果修改数据库信息,则无需修改源代码,只需修改配置信息即可。

    2.xml的申明

    <?xml version="1.0" encoding="utf-8"?>
    <person>
    <name>baojuan</name>
    <age>20</age>
    <a>a&lt;b</a>
    <b>a&gt;b</b>
    <c>&quot;a&lt;b&quot;</c>
    <b>&apos;a&gt;b&apos;</b>
    </person>

    注:<?xml version="1.0"encoding="utf-8"?>必须要放在文件的首行,而且xml后必须要有一个空格,encoding前面也必须要有一个空格

      标签的开始必须要有结束,规范性的。

      一个xml文件有且仅有一个根标签,其他的标签都是它的子标签。

      在xml文件中会把空格和换行也当作内容来处理。

      xml文件是区分大小写的。标签不能以数字和下划线开头。

      xml标签中不能包含空格和冒号,不能以xml开头,标签可以是中文。

    对于大于小于号,双引号,单引号等特殊字符需要进行转义。但可以用CDATA区进行处理。

    写法:<![CDATA[ 内容 ]]>

    <?xml version="1.0" encoding="utf-8"?>
    <person>
    <name>baojuan</name>
    <age>20</age>
    <![CDATA[<a>a<b</a>
    <b>a>b</b>
    <c>"a<b"</c><d>'a>b'</d> ]]>
    </person>

    *PI指令用于指示显示的样式,用于引入css文件,但几乎用不到。xml一般用于保存数据,PI指令只对英文起作用,对中文标签不起作用。

    3.xml约束

    <?xml version="1.0" encoding="utf-8"?>
    <person>
    <name>baojuan</name>
    <age>20</age>
    <![CDATA[<a>a<b</a>
    <b>a>b</b>
    <c>"a<b"</c><d>'a>b'</d> ]]>
    <猫>100</猫>
    </person>
    *人不可能拥有猫这个属性,但这样写任然符合语法,所以可以运行,so需要一些规则来约束。
    xml的约束:dtd约束     schema约束

    <?xml version="1.0" encoding="utf-8"?>
    <!--引入外部dtd文件<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
    <!DOCTYPE person SYSTEM "test.dtd">
    -->


    <!--内部dtd文件 <!DOCTYPE 根元素名称[内容]>-->
    <!DOCTYPE person[
    <!--<!ELEMENT person (name+,age,sex,school,面积)>-->        //+  表示可以含有1到多个同样的实体
    <!ELEMENT person (name|age|sex|school|面积)>       // | 表示枚举,只能含列举出的标签中的任意一个
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT sex EMPTY>      //EMPTY表示此标签内必须为空
    <!ELEMENT school ANY>
    <!ELEMENT 面积 ANY>      //ANY表示标签内可以任意
    ]>

    //(#PCDATA)之前必须要有空格。


    <!-- 使用外部网络上的dtd文件(struts.xml框架)
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
    <!DOCTYPE 根元素名称 PUBLIC "DTD名称""DTD文档的URL">
     -->
    <person>
    <name>baojuan</name>
    <!--<age>20</age>
    <sex></sex>
    <school>4555</school>
    <面积>dhhahs</面积>-->
    </person>


    4.xml的解析    (dom解析技术和sax解析技术)

           **根据xml的层级结构在内存中分配一个树形结构,把xml的标签属性文本都封装成对象,使用dom来解析时,如果文件过大,会造成内存溢出。

              优点:很方便实行增删改操作。

          **使用sax解析时,采用事件驱动,边都变解析。从上到下依次解析,没遇到一个对象,就把对象名称返回,不会造成内存溢出,可以实现查询,但不能进行增删改操作。

    想要解析xml,首先需要解析器,不同的公司提供了不同的解析器,通过api方式提供。

    sun公司提供了jaxp解析器,dom4j组织提供了dom4j解析器(*****实际开发中常用*******),jdom组织提供了jdom解析器。

    **jaxp解析器在jdk的javax.xml.parsers包里面

    四个类:针对dom和sax解析的四个类

        dom:documentBuilder:解析器类

           * 这个类是一个抽象类,不能new,只能使用DocumentBuilderFactory.newDocumentBuilder() 方法获取。

           * 一个方法,可以解析xml,parse("xml路径"),返回doucument整个文档。

           * 返回的document是一个接口,父节点是node,如果在document里找不到想要的方法,就要去node里去找。

           * 在document里,有一个方法,getElementsByTagName(String tagname)返回的是一个nodeList数组,可以得到标签数组。

           * createElement(String tagName)方法创建一个标签。

           * createTextNode(String data)方法创建一个文本。

           * appendChild(Node newChild)node接口中的方法,将文本添加到标签下面。

           * removeChild(Node oldChild)删除节点,但要经过父节点来删。

           * getParentNode()获取父节点

           * NodeList    list

            getLength()      //得到集合的长度

            item(int index)         //根据下标取到具体的值

            for(int i=0;i<list.getLength();i++){

              list.item(i);

            }

           documentBuilderFactory:解析器工厂

           这个类是一个抽象类,不能new,只能通过newInstance()来获得documentBuilderFactory的对象实例。

        sax:SAXParser:解析器类

           SAXParserFactory:解析器工厂

  • 相关阅读:
    iOS开发时区缩写
    HTTPS工作原理-默写
    【Swift学习笔记-《PRODUCT》读书记录-CoreData数据存储】
    判断是否是满二叉树
    词向量
    百面机器学习|第一章 特征工程
    c++中创建二维数组的几种方法
    深度学习入门|第七章 卷积神经网络(三)
    深度学习入门|第六章与学习相关的技巧(二)
    深度学习入门|第七章卷积神经网络
  • 原文地址:https://www.cnblogs.com/aasu/p/9108621.html
Copyright © 2011-2022 走看看