标签:
XML(Extensible Markup Language):可扩展标记语言,允许用户自定义标签(元素),在很多场合,被用作数据传递、持久化以及配置文件。
其实XML本身没具备任何行为,但是因为XML是能够被多种操作系统和应用程序识别的纯文本格式,所以在很多地方,被用作数据传输和信息交互。
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,内置了循环、判断、取值等标签:
<?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文件效果
标签:
原文地址:http://www.cnblogs.com/rammderek/p/4240409.html