XML 全面总结

 

XML专用名词:
XML: XML即可扩展标记语言,Extensible Markup Language.标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,即可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等

DTD: 是一种保证XML文档格式正确的有效方法,可以比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确
Schema: XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD

DOM: document object model 文档对象模型  
SAX: Simple APIs for XML,也即XML简单应用程序接口。它是XML_DEV邮件列表中的成员根据应用的需求自发地定义的一套对XML文档进行操作的接口规范
 SAX是顺序的,层次化的分析XML文档,着眼于当前的事件连续的处理,不是全部文档都读入内存
 DOM的做法正是将XML文档元素全部读入内存,生成一棵包含全部内容的树,以便全局的控制各个节点元素

XSLT:一种用于转换 XML 文档的语言
XPath:一种用于在 XML 文档中导航的语言。
XSL-FO:一种用于格式化 XML 文档的语言

DTD和Schema的说明:
<?xml version="1.0"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

DTD的定义如下:
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

Schema的定义如下:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="note">
    <xs:complexType>
      <xs:sequence>
 <xs:element name="to" type="xs:string"/>
 <xs:element name="from" type="xs:string"/>
 <xs:element name="heading" type="xs:string"/>
 <xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

引用DTD:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "http://www.aa.com/dtd/note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

引用Schema:
<?xml version="1.0"?>
<note xmlns="http://www.aa.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.aa.com note.xsd">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

                      
XML语法:
1 只有一个根元素

2 注释用<!-- -->表示

3 属性值用双引号或单引号分隔

4 区分大小写字母


XML 与 HTML 的主要区别:

XML是区分大小写字母的,HTML不区分。

在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略&lt;/p&gt;或者&lt;/li&gt;之类的结束标记。在XML中,绝对不能省略掉结束标记。

在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用查找结束标记了。

在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值

XML的显示可以用CSS与XSL

 

服务端访问XML文档

1 使用XMLTextWriter/XMLTextReader类以流的方式读写XML

  写入xml文档:

    构造:XmlTextWriter xml = new XmlTextWriter(Server.MapPath("~/a.xml"), Encoding.UTF8);

    写入xml声明: xml.WriteStartDocument();

    写入元素AA:xml.WriteStartElement("AA");   

    写入属性:xml.WriteAttributeString("AA_1", "aaaaaaaaaaa"); 
 
    写入单元素:xml.WriteElementString("BB", "bbbbbbbbbbbbbbbb");

    写入内容:xml.WriteString("AAAA");

    元素结束标记:xml.WriteEndElement();

    整个xml结束:xml.WriteEndDocument();

    资源释放: xml.Close();

 

  读出xml文档:

    构造: XmlTextReader xml = new XmlTextReader(Server.MapPath("~/a.xml"));

    读取下一行,直到结尾:xml.Read()

    判断节点类型:xml.NodeType

    获得节点名和值:xml.Name / xml.Value

    查找元素属性:xml.MoveToNextAttribute()

    资源释放: xml.Close();

 

2 使用XMLDocument类以DOM的方式读写XML

    添加节点:

 构造:XmlDocument doc = new XmlDocument();

 加载:doc.Load("路径")

 根节点:XmlElement root = doc.DocumentElement

 创建节点:XmlElement node = doc.CreateElement("aa");
       
        追加节点: root.AppendChild(node);

 保存:doc.Save("路径")


   
    使用XPath查询节点:

 获得节点:SelectSingleNode()

        XPath: 查询子节点    /根节点/子节点

        查询节点属性的值  /根节点/子节点/[@属性]

        查询属性值为123的节点  /节点[@属性=值]

               查询第二个节点   /节点[position()=2]

               查询内容为123的BB节点 /根节点[BB=123]

 

3 使用XmlSerializer类序列化XML
    类:
    [XmlRoot("AA")]
    public class A
    {
        [XmlElement("BB")]
        public string Str { get; set; }


        [XmlElement("CC")]
        public DateTime Time { get; set; }
    }

    序列化:XmlSerializer XmlSerializer ser = new XmlSerializer(typeof(类));

            ser.Serialize(文件流, 对象);

    反序列化: XmlSerializer ser = new XmlSerializer(typeof(类));

               object obj = ser.Deserialize(文件流);


4 使用DataSet表格数据同XML的转换

    从数据库写到xml :dataset.WriteXml(文件流)

    从xml读出:dataset.ReadXml(xml文件)

    XmlDataDocument类: 同步DataSet,使用Xpath查询DataSet
   
    ds.EnforceConstraints = false;
    XmlDataDocument doc = new XmlDataDocument(ds);
    doc.Load(Server.MapPath("a.xml"));

    XmlNode node = doc.SelectSingleNode("/NewDataSet/emp[employeeid=2]");
    Response.Write(node.LastChild.InnerText);
   

posted on 2010-08-02 12:55  饶兴  阅读(202)  评论(0编辑  收藏  举报

导航