Sorry, the rest of the code is "in the main" so to speak.
It looks like
XMLValidator val = new XmlValidator("c:\\Schema file");
string temp = val.getSchema("c:\\Xml files\\fileone.xml");
string temp2 = val.getSchema("c:\\Xml files\\filetwo.xml");
string temp3 = val.getSchema("c:\\Xml files\\filethree.xml");

thank you for the complement on the code.  *smile* But unless I can
get it to -work-, it's gold plating on a Ford pinto.
I'm not trying to create a collection of Schemas that can be logically
merged into a single schema.
What I'm trying to do is more like an if (validates against first
schema) else if (validates against second schema) else if (validates
against third schema)

On Apr 8, 1:37 pm, Cerebrus <[email protected]> wrote:
> Couple of issues here:
>
> 1. The XmlSchemaSet class is a collection of Schemas that can be
> logically merged into a single schema to validate against a target
> document that maps to a single target namespace. It is unclear from
> your post if this is, in fact, the case with your schema files. If
> they can, then you don't really need a Dictionary in this scenario.
> Simply compiling them and then reading the XML document would suffice.
>
> 2. Although you have used the XmlSchemaSet to "Add" each schema file
> to an instance of the XmlReaderSettings object, I do not see where the
> "getSchema" method is called. That is the method which is doing the
> actual validation. Your actual error may be resulting from the fact
> that the overload used by the XmlReaderSettings.Schemas.Add() method
> requires the first parameter to be the target namespace of the Xml
> document, not the XSD filename. Pass a null parameter if your XML
> document does not have a namespace.
>
> 3. Your function names are confusing... The "getSchemaSet" function
> actually returns a generic dictionary containing XmlReaderSettings
> objects, not XmlSchemaSets. The rest of the code is very well written
> and deserves compliment, however!
>
> On Apr 8, 7:45 pm,LilithsThrall<[email protected]> wrote:
>
>
>
> > Please help.  I'm been working on this for a week now and don't seem
> > to be making any headway.
> > Basically, I'm getting xml which can be in about 8 different schema
> > (maybe more).  I want to run that xml against each schema to see if it
> > validates.  If it does so, I know what kind of xml file it is and I
> > know how to process it from there.  If it doesn't validate against any
> > of them, well, then I know what to do with the file in that case as
> > well.
>
> > I wrote the following code
> >     class XMLValidator
> >     {
> >         int numErrors;
> >         string msgError;
> >         Dictionary<string, XmlReaderSettings> dictSchemaSet;
>
> >         public XMLValidator(string strXSDDirectoryPath)
> >         {
>
> >             msgError = "";
> >             dictSchemaSet = null;
> >             dictSchemaSet = getSchemaSet(strXSDDirectoryPath);
> >         }
>
> >         private Dictionary<string,XmlReaderSettings> getSchemaSet
> > (string strXSDDirectoryPath)
> >         {
> >             Dictionary<string,XmlReaderSettings> dictSchemaCollection
> > = new Dictionary<string,XmlReaderSettings>();
>
> >             DirectoryInfo di = new DirectoryInfo(strXSDDirectoryPath);
> >             FileInfo[] rgFiles = di.GetFiles("*.xsd");
>
> >             foreach (FileInfo fi in rgFiles)
> >             {
> >                 XmlReaderSettings settings = new XmlReaderSettings();
> >                 settings.ValidationEventHandler += new
> > ValidationEventHandler(this.ValidationEventHandler);
> >                 settings.ValidationType = ValidationType.Schema;
> >                 string schemaPath = strXSDDirectoryPath+"\\"+fi.Name;
> >                 settings.Schemas.Add(fi.Name,XmlReader.Create
> > (schemaPath));
> >                 dictSchemaCollection.Add(fi.Name,settings);
> >             }
> >             return dictSchemaCollection;
> >         }
>
> >         private void ValidationEventHandler(object sender,
> > ValidationEventArgs args)
> >         {
> >             msgError = msgError + "\r\n" + args.Message;
> >             numErrors++;
> >         }
>
> >         public string getSchema(string strXMLpath)
> >         {
> >             string strSchemaIdentified = "unknown";
> >             numErrors = 0;
>
> >             foreach (KeyValuePair<string, XmlReaderSettings> settings
> > in dictSchemaSet)
> >             {
> >                 using (XmlReader xmlValidatingReader = XmlReader.Create
> > (strXMLpath, settings.Value))
> >                 {
> >                     while(xmlValidatingReader.Read()){}
> >                     if (numErrors == 0)
> >                     {
> >                         strSchemaIdentified = settings.Key;
> >                         break;
> >                     }
> >                     else
> >                         numErrors = 0;
> >                 }
> >             }
> >             return strSchemaIdentified;
> >         }
> >     }
>
> > However, when I run xml against it, the code always reports that the
> > xml validates against the first schema in the dictionary.  I tested
> > the schema in XMLSpy.  This shouldn't be happening.
> > And, like I said, I've been banging my head against the wall on this
> > for a week.  Please give me a hand.
>
> > Thanks- Hide quoted text -
>
> - Show quoted text -

Reply via email to