zoukankan      html  css  js  c++  java
  • XML

    XML,Extensible Markup Language,可扩展标记语言,用于定义文档类型DTD、描述标记数据XML。
    DTD,Document Type Definition,文档类型定义,用于定义xml数据交换标准及文档规范验证。
    XSD,Xml Schemas Definition,文档模式定义(替代DTD),用于描述和验证XML文档结构。
    • XML和DTD的构建模块:DTD本身不是XML文档,不支持自定义类型,不支持域名机制
      1. 元素、标签、属性:<element attribute="value">content</element>
        DTD声明元素:<!ELEMENT 元素名 内容>,通配符?*+,<!ATTLIST 元素名 属性名 类型 默认值>
        1. 空元素:
          <!ELEMENT jsp:setProperty EMPTY>
        2. 带子元素:
          <!ELEMENT jsp:include (jsp:param*)>
        3. 元素属性:#REQUIRED必须,#IMPLIED可选;类型可以是CDATA或自定义ENTITY
          <!ATTLIST jsp:include
          flush %Bool; "false"
          page %URL; #REQUIRED
          >
        4. 带PCDATA的元素:
          <!ELEMENT jsp:expression (#PCDATA)>
        5. 内嵌DTD:<!DOCTYPE root [<!ELEMENT root (empty)><!ELEMENT empty EMPTY>]>
          引入DTD:
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          常见的DTD:html jsp spring
      2. 实体:xml文档用到的特殊字符使用实体代替,如空格&nbsp;小于&lt;引号&quot;等
        DTD内部实体声明:<!ENTITY 实体名 "实体值">
        DTD外部实体引入:<!ENTITY 实体名 SYSTEM "URI">
      3. PCDATA:parsed character data,比如开始标签和结束标签之间的文本
      4. CDATA:character data,不会被解析的文本,比如属性值
    • XSD定义的文档模式
      1. xsd文档模式结构:
        xsd:schema xmlns="url":xsd文档根元素为schema,定义的命名空间默认为${spring}/schema/beans
        xmlns:xsd="url":xsd文档本身命名空间为w3c标准,xsd为前缀
        targetNamespace:目标命名空间,通常在定义时与默认命名空间相同
        <xsd:schema xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.springframework.org/schema/beans">
      2. 引用xsd文档模式:
        beans xmlns="namespace":默认命名空间为${spring}/schema/beans,所以beans前面没有前缀
        xmlns:xsi="namespace":定义了这个属性后才可以使用属性xsi:schemaLocation引用自定义命名空间
        xsi:schemaLocation="namespace url":引用自定义命名空间,给出名字和网址
        xmlns:mvc="namespace":引用mvc命名空间,前缀为mvc,在schemaLocation中给出名称和网址
        <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd>
      3. xsd文档模式元素定义:建议使用ref引用各级元素或类型定义,避免单根嵌套太深
        1. 简易元素:仅包含简单文本,可被转换为字符串、整数、逻辑值、日期等简单类型
          <xsd:element name="simple" type="xsd:string" default="hehe"/>
          简单类型有:xsd:(string|decimal|integer|boolean|date|time)
        2. 复合元素:包含其他元素或属性,可以嵌套替换type,也可以命名并引用type="pairType"
          <xsd:complexType name="pairType">
          <xsd:attribute name="key" type="xsd:string" use="required"/>
          <xsd:sequence><xsd:element name="value" type="xsd:integer" use="required"/>
          <xsd:element name="enabled" type="xsd:boolean" default="false"/>
          </xsd:sequence></xsd:complexType>
          复合元素类型还支持扩展
          <xsd:complexContent><xsd:extension base="pairType">...扩展的元素或属性
          </xsd:extension></xsd:complexContent>
          复合类型定义子元素:元素组和属性组只是简单封装,ref="groupName"引用组
          xsd:all任意,xsd:sequence顺序,xsd:choice某个;
          minOccurs最少次数,maxOccurs最多次数(unbounded不限,默认为1)
          xsd:group元素组(包含xsd:all|sequence|choice),xsd:attributeGroup属性组
          引用任意元素或属性:<xsd:any|anyAttribute minOccurs="0"/>
        3. 属性:默认值default,固定值fixed,必选use,编辑xsd有来自xmlns:xsi的提示
          <xsd:attribute name="lang" type="xsd:string" fixed="EN" use="required"/>
        4. 值限定:替换type为枚举值供选择,支持限定数字范围、字符串长度等
          <xsd:simpleType><xsd:restriction base="xsd:string">
          <xsd:enumeration value="no"/><xsd:enumeration value="byName"/>
          </xsd:restriction></xsd:simpleType>
        5. 注释:编辑xml时自动提示的文本
          <xsd:annotaion><xsd:documentation><!CDATA[
          文本注释]]></xsd:documentation></xsd:annotation>
    • 解析XML文档:
      1. DOM是官方W3C标准,加载整个文档并构建层次树结构(在内存和速度上受限),可反复遍历:
        javax.xml.parsers.DocumentBuilderFactory.newInstance();
        javax.xml.parsers.DocumentBuilder=documentBuilderFactory.newDocumentBuilder();
        org.w3c.dom.Document=documentBuilder.parse(File | InputStream);
        org.w3c.dom.NodeList=document.getElementByTagName("root");
      2. SAX基于事件模型,快速解析文档,DefaultHandler(2)处理标签
        javax.xml.parsers.SAXParserFactory.newInstance();
        javax.xml.parsers.SAXParser=saxParserFactory.newSAXParser();
        saxPasrser.parse(File | InputStream, DefaultHandler);
      3. DOM4J面向接口提高灵活性,集成XPath、XML Schema和事件模型:dom4j.jar
        org.dom4j.io.SAXReader=new SAXReader();
        org.dom4j.Document=saxReader.read(File | InputStream);
      4. JDOM使用具体类简化API比DOM快(灵活性不够),使用Collections和SAX2解析器
        org.jdom.SAXBuilder=new SAXBuilder();
        org.jdom.Document=saxBuilder.build(File | InputStream);
    • 生成XML文档:
      1. DOM4J
        org.dom4j.Document=org.dom4j.DocumentHelper.createDocument();
        org.dom4j.Element=document.addElement("root");
        new org.dom4j.io.XMLWriter(FileWriter).write(document);
    • 其他XML-Object互转方案:
      1. xstream:支持直接在Object对象和XML之间相互转换
        com.thoughtworks.xstream.XStream xstream=new XStream();
        xstream.alias("Person",Person.class);//自定义类元素名称
        xstream.aliasField("writer",Blog.class,"author");//字段author对应元素writer
        xstream.useAttributeFor(Blog.class,"writer");
        xstream.registerConverter(AuthorConverter());//将Author转化为xml的转换器
        xstream.addImplicitCollection(Blog.class,"entries");//忽略集合,直接列出entry
        xstream.autodetectAnnotations(true);//懒惰lazy模式解析xml,不必处理多个含标记的类
        @XStreamAlias("type")//标记类名或字段
        @XStreamAsAttribute//字段作为xml属性
        @XStreamOmitField//忽略字段
        @XStreamImplicit//忽略集合元素,还可加上(itemFieldName="part")改变子项名
        @XStreamConverter(SingleValueCalenderConverter.class)//自定义转换器





  • 相关阅读:
    RBAC权限管理模型 产品经理 设计
    Redisson 分布式锁
    Jenkins下载历史Build版本的归档文件
    Java JPA @Transient 在Hibernate中应用
    Solving the Top ERP and CRM Metadata Challenges with erwin & Silwood
    MySQL 字符串 分割 多列
    MySQL CONCAT opposite
    Web并发页面访问量统计实现
    UNIX网络编程读书笔记:基本UDP套接口编程
    UNIX网络编程调试工具:tcpdump、netstat和lsof
  • 原文地址:https://www.cnblogs.com/xingqi/p/62e3a735a527248e27dea11743de40d1.html
Copyright © 2011-2022 走看看