.Net学习爱好者的温馨家园

.Net互动平台

导航

XML架构----使用Xml架构对象模型

如何使用 Xml 架构对象模型

此示例阐释如何将两个 XML 架构定义语言 (XSD) 架构读取到 SchemaCollection 中,浏览它们表示的架构,并创建表示该架构的虚构 XML 输出。

此示例显示如何使用 XmlSchemaCollection 缓存和检索多个架构,并说明架构对象模型 (SOM) 如何加载和保存有效的 XSD 架构。您也可以使用 SOM 创建使用强类型类的内存中架构。

为了说明如何浏览 SOM,此示例输出已加载到 SchemaCollection 中的两个 XSD 架构的格式化版本。然后,该示例创建一个 XML 流,以举例说明给定架构的用法。

 
VB XmlSchemaObjectModel.aspx

[运行示例] | [查看源代码]

该示例首先创建一个最终要输出到屏幕上的 XmlTextWriter。该示例创建它的目的是为了利用 XmlTextWriter 的各种方法,以生成格式良好的 XML。这些方法有 WriteStartElement、WriteEndElement 和 WriteAttributeString 等等。然后,该示例创建一个 XmlNameTable,并将该名称表添加到 XmlSchemaCollection。在 XmlSchemaCollection 中,该示例读取两个唯一的 XSD 架构。最后,该示例将 XmlSchemaCollection 中的每个架构写到屏幕上,后面是对一些示例 XML 使用该架构的例子。

...
            myXmlTextWriter = new XmlTextWriter(Console.Out);
            myXmlTextWriter.Formatting = Formatting.Indented;
            myXmlTextWriter.Indentation = 2;
            ...
            XmlNameTable myXmlNameTable = new NameTable();
            ...
            XmlSchemaCollection myXmlSchemaCollection = new XmlSchemaCollection(myXmlNameTable);
            ...
            myXmlSchemaCollection.Add(null, args[0]);
            ...
            myXmlSchemaCollection.Add(null, args[1]);
            ...
            foreach(XmlSchema myTempXmlSchema in myXmlSchemaCollection)
            {
            myXmlSchema = myTempXmlSchema;
            ...
            // Write out the various schema parts
            WriteXSDSchema();
            ...
            // Write out an example of the XML for the schema
            WriteExample();
            ...
            }
            
C# VB  

下列代码中的函数将 XSD 架构写到屏幕上。从本质上说,这些函数依次通过 XmlSchema 中的每项,确定其类型,然后设置该项输出到屏幕上的格式。

    // Write out the XSD
            void WriteXSDSchema()
            {
            myXmlTextWriter.WriteStartElement("schema", XmlSchema.Namespace);
            myXmlTextWriter.WriteAttributeString("targetNamespace", myXmlSchema.TargetNamespace);
            foreach(XmlSchemaInclude include in myXmlSchema.Includes)
            {
            myXmlTextWriter.WriteStartElement("include", XmlSchema.Namespace);
            myXmlTextWriter.WriteAttributeString("schemaLocation", include.SchemaLocation);
            myXmlTextWriter.WriteEndElement();
            }
            foreach(object item in myXmlSchema.Items)
            {
            if (item is XmlSchemaAttribute)
            WriteXmlSchemaAttribute((XmlSchemaAttribute)item);      //attribute
            else if (item is XmlSchemaComplexType)
            WriteXmlSchemaComplexType((XmlSchemaComplexType)item);  //complexType
            else if (item is XmlSchemaSimpleType)
            WriteXmlSchemaSimpleType((XmlSchemaSimpleType)item);    //simpleType
            else if (item is XmlSchemaElement)
            WriteXmlSchemaElement((XmlSchemaElement)item);          //element
            else if (item is XmlSchemaAnnotation)
            WriteXmlSchemaAnnotation((XmlSchemaAnnotation)item);    //annotation
            else if (item is XmlSchemaAttributeGroup)
            WriteXmlSchemaAttributeGroup((XmlSchemaAttributeGroup)item); //attributeGroup
            else if (item is XmlSchemaNotation)
            WriteXmlSchemaNotation((XmlSchemaNotation)item);        //notation
            else if (item is XmlSchemaGroup)
            WriteXmlSchemaGroup((XmlSchemaGroup)item);              //group
            else
            Console.WriteLine("Not Implemented.");
            }
            myXmlTextWriter.WriteEndElement();
            }
            
C# VB  

下列代码中的函数写出验证为架构的 XML 的样式。从本质上说,这些函数依次通过 XmlSchema 中的每项,在确定其类型后,使用一些示例数据设置该项输出到屏幕上的格式。

    // Write out the example of the XSD usage
            void WriteExample()
            {
            foreach(XmlSchemaElement element in myXmlSchema.Elements.Values)
            WriteExampleElement(element);
            }
            // Write some example elements
            void WriteExampleElement(XmlSchemaElement element)
            {
            myXmlTextWriter.WriteStartElement(element.QualifiedName.Name, element.QualifiedName.Namespace);
            if (element.ElementType is XmlSchemaComplexType)
            {
            XmlSchemaComplexType type = (XmlSchemaComplexType)element.ElementType;
            if (type.ContentModel != null)
            Console.WriteLine("Not Implemented for this ContentModel");
            WriteExampleAttributes(type.Attributes);
            WriteExampleParticle(type.Particle);
            }
            else
            WriteExampleValue(element.ElementType);
            myXmlTextWriter.WriteEndElement();
            }
            
C# VB  

摘要

  1. 架构对象模型 (SOM) 加载和保存有效的 XSD 架构。
  2. SOM 提供了一种创建使用强类型类的内存中架构的简便方法。
  3. 您可以使用 XmlSchemaCollection 对象缓存和检索多个架构。
  4. SOM 通过 XmlSchemaCollection 使用 XmlValidatingReader。

posted on 2006-12-06 19:40  Xt Idt  阅读(1065)  评论(1编辑  收藏  举报