साथ मैं XSD साथ एक्सएमएल मान्य वास्तविक कठिनाइयों में चल रहा हूँ। मैं आगे इस और राज्य के सभी उपसर्ग चाहिए, मैं XSD और सत्यापन के लिए नए हूँ, इसलिए मुझे यकीन है कि अगर यह एक कोड मुद्दा या एक एक्सएमएल मुद्दा है नहीं कर रहा हूँ। मैं XML API नरक में किया गया है और bajillion विभिन्न विकल्पों के साथ वापस और लगता है कि मैं पाया है कि क्या XSD के साथ एक्सएमएल मान्य के लिए आदर्श रणनीति होगी गए हैं। ध्यान दें, मेरी एक्सएमएल और XSD एक डेटाबेस से आ रहे हैं, इसलिए मैं डिस्क से कुछ भी पढ़ने की जरूरत नहीं है।सत्यापित किया जा रहा एक्सएमएल XSD
मैं एक साधारण नमूना Windows Forms आवेदन में मेरी समस्या को संकुचित होता है। यह XSD (txtXsd) के लिए एक पाठ बॉक्स, एक्सएमएल (txtXml) के लिए एक पाठ बॉक्स, परिणाम (txtResult) के लिए एक पाठ बॉक्स, और एक बटन सत्यापन शुरू करने के लिए (btnValidate) है।
मैं Microsoft से एक नमूना XSD फ़ाइल का उपयोग कर रहा हूँ,
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:bookstore-schema" elementFormDefault="qualified" targetNamespace="urn:bookstore-schema">
<xsd:element name="title" type="xsd:string" />
<xsd:element name="comment" type="xsd:string" />
<xsd:element name="author" type="authorName"/>
<xsd:complexType name="authorName">
<xsd:sequence>
<xsd:element name="first-name" type="xsd:string" />
<xsd:element name="last-name" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
मैं अपने आवेदन में निम्नलिखित कोड का उपयोग कर रहा हूँ।
private void btnValidate_Click (object sender, EventArgs e)
{
try
{
XmlTextReader reader = new XmlTextReader(txtXsd.Text, XmlNodeType.Document, new XmlParserContext(null, null, String.Empty, XmlSpace.None));
XmlSchema schema = XmlSchema.Read(reader, null);
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(schema);
XDocument doc = XDocument.Parse(txtXml.Text);
doc.Validate(schemas, ValidateSchema);
}
catch (Exception exception)
{
txtResult.Text += exception.Message + Environment.NewLine;
}
}
private void ValidateSchema (Object sender, ValidationEventArgs e)
{
txtResult.Text += e.Message + Environment.NewLine;
}
एक परीक्षण के रूप में, मैंने वैध एक्सएमएल रखा है, लेकिन मुझे लगता है कि ऊपर एक्सएसडी के अनुरूप नहीं होना चाहिए।
<xml>
<bogusNode>blah</bogusNode>
</xml>
परिणाम कुछ भी नहीं है, कोई सत्यापन त्रुटियां नहीं हैं। मैं इसे कैसे ठीक करूं?
मुझे एक झुकाव संदेह था कि क्या चल रहा था। एक एक्सएमएल किताब पिकअप करने जा रहे हैं। –
बड़ी तस्वीर में, मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि xml सबमिट xsd के अनुरूप है। क्या वे एक ही नेमस्पेस में नहीं हैं तो सत्यापित करने का कोई तरीका है? क्या मुझे वास्तव में दोनों नामस्थानों को देख कर कोड में ऐसा करना है? –
यहोशू: एक्सएमएल जिसे आप मान्य कर रहे हैं वह एक्सएसडी परिभाषित होने के समान नामस्थान होना चाहिए। एक्सएमएल नेमस्पेस का यह पूरा बिंदु है - आम तौर पर इस्तेमाल किए जा सकने वाले पहचानकर्ताओं/टैग्स को रखने में सक्षम होना (जैसे '
') उन्हें अपने नामस्थान (जैसे .NET नेमस्पेस) में डालकर। –