XML文档

XML(Extensible Markup Language):可扩展标记语言,允许用户自定义标签(元素),在很多场合,被用作数据传递、持久化以及配置文件。

其实XML本身没具备任何行为,但是因为XML是能够被多种操作系统和应用程序识别的纯文本格式,所以在很多地方,被用作数据传输和信息交互。

XML本身的语法很简单,有一些常用的规则:

  1. 第一行是XML声明(必须在第一行)
  2. 有且仅有一个根结点
  3. 区分大小写
  4. 所有节点必须有关闭标签(自关闭也算)
  5. 节点之间允许包含,但是不允许交叉嵌套
  6. 节点中属性名称必须唯一
  7. 属性的值左右需要双引号
  8. XML中可以使用实体引用和注释<!-- -->

举个例子:

<?xml version="1.0" encoding="utf-8" ?>
<books>
  <book isbn="1001">
    <title>红楼梦</title>
    <author>曹雪芹</author>
    <price>10.99</price>
    <pubdate>2010-1-1</pubdate>
  </book>
  <book isbn="1002">
    <title>西游记</title>
    <author>吴承恩</author>
    <price>20.99</price>
    <pubdate>2010-2-1</pubdate>
  </book>
  <book isbn="1003">
    <title>水浒传</title>
    <author>施耐庵</author>
    <price>30.99</price>
    <pubdate>2010-3-1</pubdate>
  </book>
  <book isbn="1004">
    <title>三国演义</title>
    <author>罗贯中</author>
    <price>40.99</price>
    <pubdate>2010-4-1</pubdate>
  </book>
</books>

换一种编写方式(XML文件没有固定的编写格式)

<?xml version="1.0" encoding="utf-8" ?>
<books>
  <book isbn="1001" title="红楼梦" author="曹雪芹" price="10.99" pubdate="2010-1-1"/>
  <book isbn="1002" title="西游记" author="吴承恩" price="20.99" pubdate="2010-2-1"/>
  <book isbn="1003" title="水浒传" author="施耐庵" price="30.99" pubdate="2010-3-1"/>
  <book isbn="1004" title="三国演义" author="罗贯中" price="40.99" pubdate="2010-4-1"/>
</books>

对比两种XML格式,第一种更易于阅读和扩展(易于展现树状层级结构),第二种更易于代码读写(避免嵌套循环,但是对内容有要求)

保证XML格式的正确有效,可以借助于XML验证(DTD和Schema)

其中DTD验证逐渐淡出,但是还有部分场合在使用,今后的验证主要趋向于Schema验证

下面是一段DTD的验证(内部验证和外部文件验证均可,调用方式可以在互联网上查找):

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE books[
  <!ELEMENT books (book*)>
  <!ELEMENT book (title,author,price,pubdate)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT price (#PCDATA)>
  <!ELEMENT pubdate (#PCDATA)>
  <!ATTLIST book isbn CDATA #REQUIRED>
]>
<books>
  <book isbn="1001">
    <title>红楼梦</title>
    <author>曹雪芹</author>
    <price>10.99</price>
    <pubdate>2010-1-1</pubdate>
  </book>
  <book isbn="1002">
    <title>西游记</title>
    <author>吴承恩</author>
    <price>20.99</price>
    <pubdate>2010-2-1</pubdate>
  </book>
  <book isbn="1003">
    <title>水浒传</title>
    <author>施耐庵</author>
    <price>30.99</price>
    <pubdate>2010-3-1</pubdate>
  </book>
  <book isbn="1004">
    <title>三国演义</title>
    <author>罗贯中</author>
    <price>40.99</price>
    <pubdate>2010-4-1</pubdate>
  </book>
</books>

Schema验证本身也是XML文件,所以扩展性,阅读性更强,同时支持数据类型和命名空间,重要的是,允许通过VS等工具,反向生成验证文档(在菜单XML中,选择创建架构),如:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://www.rammderek.com/bookList.xsd"elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="books">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="book">
          <xs:complexType>
            <xs:attribute name="isbn" type="xs:unsignedShort" use="required" />
            <xs:attribute name="title" type="xs:string" use="required" />
            <xs:attribute name="author" type="xs:string" use="required" />
            <xs:attribute name="price" type="xs:decimal" use="required" />
            <xs:attribute name="pubdate" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

对应的XML文件需要追加验证属性

<?xml version="1.0" encoding="utf-8" ?>
<books xmlns="http://www.rammderek.com/bookList.xsd">
  <book isbn="1001" title="红楼梦" author="曹雪芹" price="10.99" pubdate="2010-1-1"/>
  <book isbn="1002" title="西游记" author="吴承恩" price="20.99" pubdate="2010-2-1"/>
  <book isbn="1003" title="水浒传" author="施耐庵" price="30.99" pubdate="2010-3-1"/>
  <book isbn="1004" title="三国演义" author="罗贯中" price="40.99" pubdate="2010-4-1"/>
</books>

通过Schema验证,还能够帮助我们在编写XML文档的时候,调用智能提示,有关Schema验证的语法,参见文档

有关XML的显示,可以使用CSS或者XSLT,其中XSLT的使用更为常见

首先编写CSS样式表:Books.css

books {
    display: block;
}
book {
    display: block;
    margin: 10px;
    border-bottom: 1px dotted darkcyan;
}
title {
    display: block;
    font-size: 24px;
    color: darkblue;
}
author {
    color: lightblue;
}
price {
    color: darkgreen;
    font-style: italic;
}
pubdate {
    color: red;
}

关联CSS样式的XML文件,需要加入样式引用,如下:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE books[
  <!ELEMENT books (book*)>
  <!ELEMENT book (title,author,price,pubdate)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT price (#PCDATA)>
  <!ELEMENT pubdate (#PCDATA)>
  <!ATTLIST book isbn CDATA #REQUIRED>
]>
<?xml-stylesheet type="text/css" href="Books.css"?>
<books>
  <book isbn="1001">
    <title>红楼梦</title>
    <author>曹雪芹</author>
    <price>10.99</price>
    <pubdate>2010-1-1</pubdate>
  </book>
  <book isbn="1002">
    <title>西游记</title>
    <author>吴承恩</author>
    <price>20.99</price>
    <pubdate>2010-2-1</pubdate>
  </book>
  <book isbn="1003">
    <title>水浒传</title>
    <author>施耐庵</author>
    <price>30.99</price>
    <pubdate>2010-3-1</pubdate>
  </book>
  <book isbn="1004">
    <title>三国演义</title>
    <author>罗贯中</author>
    <price>40.99</price>
    <pubdate>2010-4-1</pubdate>
  </book>
</books>

最终XML文件在浏览器中的显示效果

XSLT样式,有点像JSTL,内置了循环、判断、取值等标签:

<xsl:template match=“/”>

<xsl:for-each>

<xsl:value-of>

<xsl:sort>

<xsl:if>

<xsl:choose>

下面的代码是一个简单的XSLT文件,用于获取XML的内容,并动态生成HTML格式的页面:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
      <html>
        <head>
          <title>Book List</title>
        </head>
        <body>
          <table border="1">
            <tr>
              <td>标题</td>
              <td>作者</td>
              <td>价格</td>
              <td>日期</td>
            </tr>
            <xsl:for-each select="books/book">
              <tr>
                <td><xsl:value-of select="title"/></td>
                <td><xsl:value-of select="author"/></td>
                <td><xsl:value-of select="price"/></td>
                <td><xsl:value-of select="pubdate"/></td>
              </tr>
            </xsl:for-each>
          </table>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>

对应的XML文件也需要加入XSLT文件的样式引用

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE books[
  <!ELEMENT books (book*)>
  <!ELEMENT book (title,author,price,pubdate)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT price (#PCDATA)>
  <!ELEMENT pubdate (#PCDATA)>
  <!ATTLIST book isbn CDATA #REQUIRED>
]>
<?xml-stylesheet type="text/xsl" href="Books.xslt"?>
<books>
  <book isbn="1001">
    <title>红楼梦</title>
    <author>曹雪芹</author>
    <price>10.99</price>
    <pubdate>2010-1-1</pubdate>
  </book>
  <book isbn="1002">
    <title>西游记</title>
    <author>吴承恩</author>
    <price>20.99</price>
    <pubdate>2010-2-1</pubdate>
  </book>
  <book isbn="1003">
    <title>水浒传</title>
    <author>施耐庵</author>
    <price>30.99</price>
    <pubdate>2010-3-1</pubdate>
  </book>
  <book isbn="1004">
    <title>三国演义</title>
    <author>罗贯中</author>
    <price>40.99</price>
    <pubdate>2010-4-1</pubdate>
  </book>
</books>

最终浏览器显示的XML文件效果

时间: 2024-10-06 00:17:05

XML文档的相关文章

四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的. [优点]      ①允许应用

python+selenium自动化软件测试(第12章):Python读写XML文档

XML 即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进 行定义的源语言.xml 有如下特征: 首先,它是有标签对组成:<aa></aa> 标签可以有属性: <aa id=’123’></aa> 标签对可以嵌入数据: <aa>abc</aa>Python对XML文档读写常用有几个模块: (1) xml.etree.ElementTree ElementTree就像一个轻量级的DOM,具有方便友好的A

解析简单xml文档

一.解析简单的xml文档 使用xml.etree.ElementTree 下的parse() xmlName.xml的文档的内容如下: <?xml version="1.0"?> <data> <country name="zhongguo"> <rank updated="yes">2</rank> <year >2017</year> <gdppc>

DTD验证XML文档

DTD验证XML文档        1.DTD简介:DTD是Document Type Definition的缩写,即文档定义            1.1:DTD的内容包含:                    元素定义规则                    元素之间的关系规则                    属性的定义规则            1.2:DTD的作用如下:                    DTD使每个XML文件可以携带一个自身格式的描述          

javaweb学习总结十三(dom4j方式对XML文档进行解析)

一:dom4j方式介绍 对于xml的解析总共有三种 1:jaxp方式,是sun公司开发的,分为sax方式和dom方式 2:jdom方式,后来其中部分人员参与开发dom4j 3:dom4j方式,是现在企业使用比较多的一种方式 二:代码案例 1:读取xml文件中某个节点 1):获取第二个学生的名字 1 @Test 2 // 1:获取第二个学生的名字 3 public void test01() throws DocumentException { 4 // 1:获取解析器 5 SAXReader r

[翻译][Ruby教程]Nokogiri - 解析HTML/XML文档 / Parsing an HTML/XML Document

From a String From a File From the Internet Parse Options Encoding 原文: Parsing an HTML/XML Document 解析HTML/XML文档 从字符串读取 We’ve tried to make this easy on you. Really! We’re here to make your life easier. 1 html_doc = Nokogiri::HTML("<html><bo

JAVA对象和XML文档、原来他们之间还有这一出

最近项目开发中遇到一个问题,访问接口不再通过url地址请求的方式,而是 通过socket发送xml格式的报文到指定服务器来进行信息的统一认证.. 因此组装xml格式的报文字符串以及解析服务器返回的xml格式的字符获得所需数据成了 解决问题的关键..在这之前,以为会有点难...做完之后,然并卵,也就那么一回事... LZ主要用的xStream类..这个类的完美地解决了XML文档和JAVA对象之间的转换.. 由于刚刚接触这个类...对于里面提供的很多功能还没细细挖掘..只是简单地实现了 我想要实现的

XPath对XML文档的解析

首先,得感谢一下写XPath的开发人员考虑到中国人编写了中文文档! 使用XPath让我们解析XML文档变得更加灵活简单了. package it.xiehe.xml; import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Node; import org.dom4j.io.SAXReader; /* *

浅谈用java解析xml文档(四)

继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使用dom4j解析,个人认为是四种解析方式里面最方便的一种,DOM4J是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件.如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用D

浅谈用java解析xml文档(三)

接上一篇,本文介绍使用JDOM解析xml文档, 首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初, JDOM作为一个开放源代码项目正式开始研发.JDOM是一种解析XML的Java工具包. JDOM基于树状结构,利用纯JAVA技术对XML文档实现解析.生成.序列化及其它操作. 我们从以下步骤开始解析: (1).通过JDOM的API创建一个SAXBuilder的对象 SAXBuilder saxBuilder