XML学习2
一只纯菜鸟的角度....持续更新中。一如既往,求指教,求更正。
先解决上篇提到的两个问题:xml 为什么要解析?怎么解析?
现在看到这两个问题,就觉得我当时的IQ...一走出去,整条街的平均水平都被我拉低了不少。
xml主要用于配置信息和数据交换,设想下:一个很大的系统(比如一个跨国企业的管理系统)的两个模块用的是不同的语言开发,但由于业务需要者两个模块间必须进行大量的数据交换,xml就提供了很好的解决方案,但对方拿到数据后怎么读懂这些xml文件呢?于是xml解析就出现了。 Xml的解析方式,按模式分可分为:
DOM—DOM是面向模型的,一次将XML文档加入内存,编程简单,适合小型文件的解析
SAX —SAX是面向事件的,读一部分解析以部分,编程复杂一些,适合大型文件的解析。
按具体实现技术又可以分成很多。这些在我现在还不清楚,以后再写。
昨天用DTD定义了个xml并做了超简单的解析。当时就觉得DTD有些蛋疼,语法晦涩难懂,又看不出有什么牛X的地方。好在今天学到了新的一招:Schema 它搭载更简单的语法,而且语法和xml类似。实现更好效果。
我也不知道Schema是DTD的后继者还是另一种技术,但对于我们99%的程序猿来说:英雄不问出处,能解决问题就行所以就别去纠结了。下面就通过简单的实例来入门吧。补充说下XSLT:本质上说xslt也是个xml,它里面包含Xpath(用来遍历xml文件的),经过它修饰后的xml能实现数据和显示的分离,但由于这厮的效率太低所以用的很少。现在是个打酱油的了。
目的:用schema+xml实现下面的表中的要求,xml用XSLT修饰
字段名 |
数据类型和约束 |
|
编号 |
唯一/类似于:T03-12/必需 作为属性 |
|
姓名 |
1---30个字符/必需 |
|
年龄 |
18---35的数字/必需 |
|
性别 |
男或女/必需 |
|
联系方式 |
家庭住址 |
10---100个字符/必需 |
手机 |
11个数字/可以多个 |
|
固定电话 |
类似:0735-2599991或010-87654673/可以多个 |
--------------------------------------------schema文件 students.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:bl="http://www.xxoo.ckon" targetNamespace="http://www.xxoo.ckon" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:simpleType name="myprice">
<xs:restriction base="xs:int">
<xs:maxExclusive value="500"/>
<xs:minInclusive value="5"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="students">
<xs:complexType>
<xs:sequence>
<xs:element name="student">
<xs:complexType>
<xs:sequence>
<xs:element name="name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="18"/>
<xs:maxInclusive value="35"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="sex">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration value="女"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="relationtel">
<xs:complexType>
<xs:attribute name="address" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="10"/>
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="cellphone" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[1][3,5]\d{9}"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="phone" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="0731-\d{7,8}"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="stuid" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[T][\d,10,11,12]{1}"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
-----------------.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<bl:students xmlns:bl="http://www.xxoo.ckon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xxoo.ckon F:\SHH\XML\src\cn\bl\test1\students.xsd">
<bl:student stuid="T4">
<bl:name>鬼见愁</bl:name>
<bl:age>23</bl:age>
<bl:sex>男</bl:sex>
<bl:relationtel address="在阿里沙山得到的视频吗个" cellphone="15200399866" phone="0731-2599991"></bl:relationtel>
</bl:student>
</bl:students>