2011-01-10 18 views
5

सी # और .NET 3.5 का उपयोग करके मैं एक स्कीमा के खिलाफ एक XML दस्तावेज़ को सत्यापित करने का प्रयास कर रहा हूं जिसमें शामिल है। > Another.xsdxmldocument और नेस्टेड स्कीमा

शामिल another.xsd - -

स्कीमा और वहाँ भी शामिल

Schema1.xsd रूप में नीचे हैं> शामिल base.xsd

जब मैं Schema1 जोड़ने के लिए प्रयास करें। xsd को XmlDocument में मुझे निम्न त्रुटि मिलती है।

टाइप करें 'YesNoType' घोषित नहीं किया गया है या यह एक साधारण प्रकार नहीं है।

मुझे विश्वास है कि मुझे यह त्रुटि मिल रही है क्योंकि जब मैं Schema1.xsd स्कीमा लोड करता हूं तो base.xsd फ़ाइल को शामिल नहीं किया जा रहा है।

मैं XmlSchemaSet क्लास का उपयोग करने की कोशिश कर रहा हूं और मैं स्कीमा के स्थान पर XmlResolver uri सेट कर रहा हूं।

नोट: सभी स्कीमा समान निर्देशिका ई के तहत रहते हैं: \ देव \ मुख्य \ XmlSchemas

यहाँ कोड है

string schemaPath = "E:\\Dev\\Main\\XmlSchemas"; 

XmlDocument xmlDocSchema = new XmlDocument(); 

XmlSchemaSet s = new XmlSchemaSet(); 

XmlUrlResolver resolver = new XmlUrlResolver(); 

Uri baseUri = new Uri(schemaPath); 

resolver.ResolveUri(null, schemaPath); 

s.XmlResolver = resolver; 

s.Add(null, XmlReader.Create(new System.IO.StreamReader(schemaPath + "\\Schema1.xsd"), new XmlReaderSettings { ValidationType = ValidationType.Schema, XmlResolver = resolver }, new Uri(schemaPath).ToString())); 


xmlDocSchema.Schemas.Add(s); 

ValidationEventHandler valEventHandler = new ValidationEventHandler 
(ValidateNinoDobEvent); 

try 
{ 
xmlDocSchema.LoadXml(xml); 
xmlDocSchema.Validate(valEventHandler); 
} 
catch (XmlSchemaValidationException xmlValidationError) 
{ 
// need to interogate the Validation Exception, for possible further 
// processing. 
string message = xmlValidationError.Message; 
return false; 
} 

किसी एक के खिलाफ एक XmlDocument के सत्यापन की सही दिशा में मुझे बात कर सकते हैं नेस्टेड के साथ स्कीमा शामिल हैं।

+0

बीटीडब्ल्यू, सी # .NET जैसी कोई चीज़ नहीं है –

उत्तर

0

मुझे लगता है कि है कि आप क्या करने की जरूरत है स्कीमा मर्ज करने के लिए है:

http://asp.dotnetheaven.com/howto/doc/Xml/MultipleSchemas.aspx

वे नेस्ट कर रहे हैं, इसका मतलब है कि आप पदानुक्रम के निचले भाग में शुरू करने की आवश्यकता होगी और उन्हें उस क्रम में लोड करें। मैं 100% निश्चित नहीं हूं क्योंकि नमूने जिन्हें मैं ढूंढने में सक्षम था, सख्ती से बोलने, घोंसले वाली संरचनाओं, बल्कि पूरक संरचनाओं में नहीं था। सौभाग्य।

1

मेरे पास एक नेस्टेड स्कीमा केस भी है और मुझे सत्यापन में कोई त्रुटि नहीं मिली है। मेरा कोड follwoing की तरह दिखता है।

private string strLogger = null; 
    public bool ValidateXml(string path2XMLFile, string path2XSDFile) 
    { 
     bool isValidFile = false; 
     try 
     { 
      XmlReaderSettings settings = new XmlReaderSettings(); 
      settings.ValidationType = ValidationType.Schema; 
      settings.Schemas.Add(null, path2XSDFile); 
      settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler); 
      XmlReader reader = XmlReader.Create(path2XMLFile, settings); 
      while (reader.Read()) ; 
      if (String.IsNullOrEmpty(strLogger)) 
      { 
       isValidFile = true; 
      }     
     } 
     catch (Exception ex) 
     { 
      LoggingHandler.Log(ex); 
     } 
     return isValidFile; 
    } 
    private void settings_ValidationEventHandler(object sender, ValidationEventArgs e) 
    { 
     strLogger += System.Environment.NewLine + "Validation Error Message = [" + e.Message + "], " + "Validation Error Severity = [" + e.Severity + "], " + System.Environment.NewLine; 
    }