Exemplo n.º 1
0
        private SchemaParser(string schemafile, SchemaMap map)
        {
            _filename = schemafile;

            XmlDocument doc = new XmlDocument();

            doc.Load(schemafile);

            XmlNode e = doc.DocumentElement;

            if (!e.Name.EndsWith("schema"))
            {
                throw new Exception("No schema");
            }

            _prefix = e.Name.Substring(0, e.Name.Length - 6);

            _virtualRoot = new XsdSchema(e);
            parse(e, _virtualRoot);

            expandImports(map);
            expandReferences();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Parses the schema and adds the found items to node
        /// </summary>
        /// <param name="schema"></param>
        /// <param name="node"></param>
        private void parse(XmlNode schema, XsdNode node)
        {
            XmlNodeList nl = schema.ChildNodes;

            for (int i = 0; i < nl.Count; i++)
            {
                XmlNode n = nl.Item(i);

                string name = n.Name;
                if (!name.StartsWith(_prefix))
                {
                    continue;
                }
                name = name.Substring(_prefix.Length);

                switch (name)
                {
                case "element":
                {
                    XsdNode newNode = new XsdElement(n);
                    node.AddKids(newNode);
                    parse(n, newNode);
                    break;
                }

                case "sequence":
                case "choice":
                case "all":
                {
                    XsdNode newNode = new XsdAllSequenceChoice(n, name);
                    node.AddKids(newNode);
                    parse(n, newNode);
                    break;
                }

                case "documentation":
                {
                    //last element
                    node.AddAnnotation(n.InnerText);
                    break;
                }

                case "attribute":
                {
                    XsdAttribute newAttr = new XsdAttribute(n);
                    ((IXsdHasAttribute)node).AddAtts(newAttr);
                    parse(n, newAttr);
                    break;
                }

                case "complexType":
                {
                    if (!string.IsNullOrEmpty(VisualizerHelper.GetAttr(n, "name")))
                    {
                        XsdComplexType newType = new XsdComplexType(n);
                        node.AddKids(newType);
                        parse(n, newType);
                    }
                    else
                    {
                        parse(n, node);
                    }
                    break;
                }

                case "simpleType":
                {
                    if (!string.IsNullOrEmpty(VisualizerHelper.GetAttr(n, "name")))
                    {
                        XsdSimpleType newType = new XsdSimpleType(n);
                        node.AddKids(newType);
                        parse(n, newType);
                    }
                    else
                    {
                        parse(n, node);
                    }
                    break;
                }

                case "annotation":
                {
                    parse(n, node);
                    break;
                }

                case "restriction":
                {
                    XsdNode newNode = new XsdRestriction(n);
                    node.AddKids(newNode);
                    parse(n, newNode);
                    break;
                }

                case "enumeration":
                {
                    string value = VisualizerHelper.GetAttr(n, "value");
                    ((XsdRestriction)node).AddEnum(value);
                    break;
                }

                case "pattern":
                {
                    string value = VisualizerHelper.GetAttr(n, "value");
                    ((XsdRestriction)node).Pattern = value;
                    break;
                }

                case "length":
                {
                    string value = VisualizerHelper.GetAttr(n, "value");
                    ((XsdRestriction)node).Length = value;
                    break;
                }

                case "maxLength":
                {
                    string value = VisualizerHelper.GetAttr(n, "value");
                    ((XsdRestriction)node).MaxLength = value;
                    break;
                }

                case "minLength":
                {
                    string value = VisualizerHelper.GetAttr(n, "value");
                    ((XsdRestriction)node).MinLength = value;
                    break;
                }

                case "maxInclusive":
                {
                    string value = VisualizerHelper.GetAttr(n, "value");
                    ((XsdRestriction)node).MaxInclusive = value;
                    break;
                }

                case "maxExclusive":
                {
                    string value = VisualizerHelper.GetAttr(n, "value");
                    ((XsdRestriction)node).MaxExclusive = value;
                    break;
                }

                case "minInclusive":
                {
                    string value = VisualizerHelper.GetAttr(n, "value");
                    ((XsdRestriction)node).MinInclusive = value;
                    break;
                }

                case "minExclusive":
                {
                    string value = VisualizerHelper.GetAttr(n, "value");
                    ((XsdRestriction)node).MinExclusive = value;
                    break;
                }

                case "notation":
                case "schema":
                case "appInfo":
                case "group":
                case "#comment":
                case "#text":
                case "key":
                case "keyref":
                case "unique":
                    //ignore
                    break;

                case "any":
                {
                    XsdNode newNode = new XsdAny(n);
                    node.AddKids(newNode);
                    parse(n, newNode);
                    break;
                }

                case "import":
                case "include":
                {
                    XsdNode newNode = new XsdImportInclude(n, name);
                    node.AddKids(newNode);
                    parse(n, newNode);
                    break;
                }

                case "complexContent":
                case "simpleContent":
                {
                    parse(n, node);
                    break;
                }

                case "extension":
                {
                    XsdNode newNode = new XsdExtension(n);
                    node.AddKids(newNode);
                    parse(n, newNode);
                    break;
                }

                case "anyAttribute":
                case "attributeGroup":
                case "field":
                case "list":
                case "redefine":
                case "selector":
                case "union":
                    Debug.Fail("Not supported: " + name);
                    Console.Error.WriteLine("Not supported: " + name);
                    break;

                default:
                    Debug.Fail("Unknown type: " + name);
                    break;
                }
            }
        }