示例#1
0
        void WriteRootElementSample(XmlTextWriter xtw, XmlQualifiedName qname)
        {
            XmlSchemaElement elem = (XmlSchemaElement)schemas.Find(qname, typeof(XmlSchemaElement));

            if (elem == null)
            {
                throw new InvalidOperationException("Element not found: " + qname);
            }
            WriteElementSample(xtw, qname.Namespace, elem);
        }
示例#2
0
        public void Bug360541()
        {
            XmlSchemaComplexType stype = GetStype();

            XmlSchemaElement selem1 = new XmlSchemaElement();

            selem1.Name       = "schema";
            selem1.SchemaType = stype;

            XmlSchema schema = new XmlSchema();

            schema.Items.Add(selem1);

            XmlSchemas xs = new XmlSchemas();

            xs.Add(schema);

            xs.Find(XmlQualifiedName.Empty, typeof(XmlSchemaElement));

            selem1            = new XmlSchemaElement();
            selem1.Name       = "schema1";
            selem1.SchemaType = stype;

            schema = new XmlSchema();
            schema.Items.Add(selem1);

            xs = new XmlSchemas();
            xs.Add(schema);
            xs.Find(XmlQualifiedName.Empty, typeof(XmlSchemaElement));
        }
示例#3
0
        /// <summary>
        /// Extends Find so that methods that return a specific type object given a Type parameter can be
        /// used as generic method and casting is not required.
        /// <example>
        /// xmlschemas.Find<int>(name);
        /// </example>
        /// </summary>
        public static T Find <T>(this XmlSchemas xmlschemas, System.Xml.XmlQualifiedName name)
        {
            if (xmlschemas == null)
            {
                throw new ArgumentNullException("xmlschemas");
            }

            return((T)xmlschemas.Find(name, typeof(T)));
        }
 internal XmlSchemaElement FindDataSetElement(XmlSchema schema, XmlSchemas schemas)
 {
     foreach (XmlSchemaObject obj2 in schema.Items)
     {
         if ((obj2 is XmlSchemaElement) && IsDataSet((XmlSchemaElement)obj2))
         {
             XmlSchemaElement element = (XmlSchemaElement)obj2;
             return((XmlSchemaElement)schemas.Find(element.QualifiedName, typeof(XmlSchemaElement)));
         }
     }
     return(null);
 }
示例#5
0
文件: Parser.cs 项目: zorroroot/WSSAT
        public List <WSParameter> GetParameters(Message msg)
        {
            List <WSParameter> parameters = new List <WSParameter>();

            foreach (MessagePart msgpart in msg.Parts)
            {
                if (!msgpart.Element.IsEmpty)
                {
                    XmlQualifiedName typName = msgpart.Element;

                    XmlSchemaElement lookup = (XmlSchemaElement)schemas.Find(typName, typeof(XmlSchemaElement));

                    if (lookup != null)
                    {
                        XmlSchemaComplexType tt = (XmlSchemaComplexType)lookup.SchemaType;

                        XmlSchemaSequence sequence = (XmlSchemaSequence)tt.Particle;
                        //int i = 0;
                        if (sequence != null)
                        {
                            foreach (XmlSchemaElement childElement in sequence.Items)
                            {
                                WSParameter param = new WSParameter();
                                param.Name      = childElement.Name;
                                param.TypeName  = childElement.SchemaTypeName.Name;
                                param.MinOccurs = childElement.MinOccurs;
                                param.MaxOccurs = childElement.MaxOccurs.ToString();

                                parameters.Add(param);
                                //ParameterAndType.Add(childElement.Name, childElement.SchemaTypeName.Name);
                                //Console.WriteLine("Element: {0} ,{1}", childElement.Name,childElement.SchemaTypeName.Name);
                            }
                        }
                    }
                }
                else
                {
                    WSParameter param = new WSParameter();
                    param.Name      = msgpart.Name;
                    param.TypeName  = msgpart.Type.Name;
                    param.MinOccurs = 0;
                    param.MaxOccurs = "0";

                    parameters.Add(param);
                }
            }

            return(parameters);
        }
        public override string ImportSchemaType(
            string name,
            string ns,
            XmlSchemaObject context,
            XmlSchemas schemas,
            XmlSchemaImporter importer,
            CodeCompileUnit compileUnit,
            CodeNamespace mainNamespace,
            CodeGenerationOptions options,
            CodeDomProvider codeProvider)
        {
            XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemas.Find(new XmlQualifiedName(name, ns), typeof(XmlSchemaSimpleType));

            return(ImportSchemaType(
                       simpleType,
                       context,
                       schemas,
                       importer,
                       compileUnit,
                       mainNamespace,
                       options,
                       codeProvider));
        }
示例#7
0
        private ServiceDescriptionImportWarnings Import(CodeNamespace codeNamespace, ImportContext importContext, Hashtable exportContext, StringCollection warnings)
        {
            allSchemas = new XmlSchemas();
            foreach (XmlSchema schema in schemas)
            {
                allSchemas.Add(schema);
            }
            foreach (ServiceDescription description in serviceDescriptions)
            {
                foreach (XmlSchema schema in description.Types.Schemas)
                {
                    allSchemas.Add(schema);
                }
            }
            Hashtable references = new Hashtable();

            if (!allSchemas.Contains(ServiceDescription.Namespace))
            {
                allSchemas.AddReference(ServiceDescription.Schema);
                references[ServiceDescription.Schema] = ServiceDescription.Schema;
            }
            if (!allSchemas.Contains(Soap.Encoding))
            {
                allSchemas.AddReference(ServiceDescription.SoapEncodingSchema);
                references[ServiceDescription.SoapEncodingSchema] = ServiceDescription.SoapEncodingSchema;
            }
            allSchemas.Compile(null, false);

            // Segregate the schemas containing abstract types from those
            // containing regular XML definitions.  This is important because
            // when you import something returning the ur-type (object), then
            // you need to import ALL types/elements within ALL schemas.  We
            // don't want the RPC-based types leaking over into the XML-based
            // element definitions.  This also occurs when you have derivation:
            // we need to search the schemas for derived types: but WHICH schemas
            // should we search.
            foreach (ServiceDescription description in serviceDescriptions)
            {
                foreach (Message message in description.Messages)
                {
                    foreach (MessagePart part in message.Parts)
                    {
                        bool isEncoded;
                        bool isLiteral;
                        FindUse(part, out isEncoded, out isLiteral);
                        if (part.Element != null && !part.Element.IsEmpty)
                        {
                            if (isEncoded)
                            {
                                throw new InvalidOperationException(Res.GetString(Res.CanTSpecifyElementOnEncodedMessagePartsPart, part.Name, message.Name));
                            }
                            XmlSchemaElement element = (XmlSchemaElement)allSchemas.Find(part.Element, typeof(XmlSchemaElement));
                            if (element != null)
                            {
                                AddSchema(element.Parent as XmlSchema, isEncoded, isLiteral, abstractSchemas, concreteSchemas, references);
                                if (element.SchemaTypeName != null && !element.SchemaTypeName.IsEmpty)
                                {
                                    XmlSchemaType type = (XmlSchemaType)allSchemas.Find(element.SchemaTypeName, typeof(XmlSchemaType));
                                    if (type != null)
                                    {
                                        AddSchema(type.Parent as XmlSchema, isEncoded, isLiteral, abstractSchemas, concreteSchemas, references);
                                    }
                                }
                            }
                        }
                        if (part.Type != null && !part.Type.IsEmpty)
                        {
                            XmlSchemaType type = (XmlSchemaType)allSchemas.Find(part.Type, typeof(XmlSchemaType));
                            if (type != null)
                            {
                                AddSchema(type.Parent as XmlSchema, isEncoded, isLiteral, abstractSchemas, concreteSchemas, references);
                            }
                        }
                    }
                }
            }

            Hashtable imports;

            foreach (XmlSchemas xmlschemas in new XmlSchemas[] { abstractSchemas, concreteSchemas })
            {
                // collect all imports
                imports = new Hashtable();
                foreach (XmlSchema schema in xmlschemas)
                {
                    AddImport(schema, imports);
                }
                // make sure we add them to the corresponding schema collections
                foreach (XmlSchema schema in imports.Keys)
                {
                    if (references[schema] == null && !xmlschemas.Contains(schema))
                    {
                        xmlschemas.Add(schema);
                    }
                }
            }

            // If a schema was not referenced by either a literal or an encoded message part,
            // add it to both collections. There's no way to tell which it should be.
            imports = new Hashtable();
            foreach (XmlSchema schema in allSchemas)
            {
                if (!abstractSchemas.Contains(schema) && !concreteSchemas.Contains(schema))
                {
                    AddImport(schema, imports);
                }
            }

            // make sure we add them to the corresponding schema collections
            foreach (XmlSchema schema in imports.Keys)
            {
                if (references[schema] != null)
                {
                    continue;
                }
                if (!abstractSchemas.Contains(schema))
                {
                    abstractSchemas.Add(schema);
                }
                if (!concreteSchemas.Contains(schema))
                {
                    concreteSchemas.Add(schema);
                }
            }
            if (abstractSchemas.Count > 0)
            {
                foreach (XmlSchema schema in references.Values)
                {
                    abstractSchemas.AddReference(schema);
                }
                StringCollection schemaWarnings = SchemaCompiler.Compile(abstractSchemas);
                foreach (string warning in schemaWarnings)
                {
                    warnings.Add(warning);
                }
            }
            if (concreteSchemas.Count > 0)
            {
                foreach (XmlSchema schema in references.Values)
                {
                    concreteSchemas.AddReference(schema);
                }
                StringCollection schemaWarnings = SchemaCompiler.Compile(concreteSchemas);
                foreach (string warning in schemaWarnings)
                {
                    warnings.Add(warning);
                }
            }
            if (ProtocolName.Length > 0)
            {
                // If a protocol was specified, only try that one
                ProtocolImporter importer = FindImporterByName(ProtocolName);
                if (importer.GenerateCode(codeNamespace, importContext, exportContext))
                {
                    return(importer.Warnings);
                }
            }
            else
            {
                // Otherwise, do "best" protocol (first one that generates something)
                for (int i = 0; i < importers.Length; i++)
                {
                    ProtocolImporter importer = importers[i];
                    if (importer.GenerateCode(codeNamespace, importContext, exportContext))
                    {
                        return(importer.Warnings);
                    }
                }
            }
            return(ServiceDescriptionImportWarnings.NoCodeGenerated);
        }
        void StartParsing()
        {
            try
            {
                processHasExited = false;
                object lookup = _schemas.Find(_qname, typeof(XmlSchemaElement));

                if (lookup != null)
                {
                    Create_RootElement(_node, _qname);
                }
                else
                {
                    Create_CustomType(_node, _qname);
                }

                processHasExited = true;
            }
            catch (Exception e)
            {
                //MessageBox.Show(e.Message.ToString() ) ;
            }
        }