Please re-read the second point in my reply to you.
On Apr 9, 12:09 am, Liliths Thrall <[email protected]> wrote: > 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 -- Hide quoted text - > > - Show quoted text -
