मैं इस कोड कण द्वारा निर्मित एक मौजूदा XSD- स्कीमा में कोई भी एलीमेंट नोड जोड़ना चाहता हूं:
private void CreateSchema()
{
//This function returns the XML Schema definition of a XML Element by using the Generation function of a Dataset
XmlSchemaInference x_scheme = new XmlSchemaInference();
this.XsDSchemaSet = x_scheme.InferSchema(this.myXmlElement.CreateReader());
this.XsDSchemaSet.Compile();;
}
मैंने XSD-स्कीमासेट बनाने के बाद कुछ हिस्सों को संशोधित किया है। निम्नलिखित कोड मौजूदा तत्वों के न्यूनतम और अधिकतम-गुण को सेट करता है जो ठीक भी काम करता है। विशेषताओं के संशोधन के बाद मुझे XmlSchemaElement का एक तत्व प्रकार XmlSchemaSequence के संग्रह में भी जोड़ना होगा, जैसे आप नमूना कोड के अंत में कुछ लाइनों में देखते हैं। वह काम नहीं करता। डीबगिंग के दौरान मैं आइटम को आइटम-संग्रह के भीतर देख सकता हूं, लेकिन स्कीमासेट की पुनर्संरचना और पुन: संयोजन के बाद संशोधित विशेषताओं को बहुत अच्छी तरह से सेट किया गया है, लेकिन उत्पन्न कोई भी तत्व मौजूद नहीं है जैसे आप अंतिम परिणाम के संदेश बॉक्स में देखते हैं। क्या कोई मदद कर सकता है?
private bool ModifyXsdElement(XmlSchemaElement element, XElement myXmlElement)
{
// this function modifies the occurance min an max of the child elements
XmlSchemaSimpleType simpleType = element.ElementSchemaType as XmlSchemaSimpleType;
if (simpleType != null)
{
MessageBox.Show("Function XsdModifyElement: Error - Simple Type!");
return false;
}
else
{
XmlSchemaComplexType complexType = element.ElementSchemaType as XmlSchemaComplexType;
if (complexType != null) //This is a complexType object
{
if (complexType.AttributeUses.Count > 0)
{
//todo: anything if there are attributes
}
bool typeMatch = false;
XmlSchemaSequence sequence = complexType.ContentTypeParticle as XmlSchemaSequence;
if (sequence != null)
{
typeMatch = true;
string fixedValue = string.Empty;
XmlSchemaElement el = new XmlSchemaElement();
foreach (XmlSchemaElement childElement in sequence.Items)
{
//MessageBox.Show("Child Element: " + childElement.Name);
int iOccCtr = GetNoOfXmlChildElements(childElement.Name, myXmlElement);
childElement.MinOccurs = iOccCtr;
childElement.MaxOccurs = iOccCtr;
childElement.MinOccursString = iOccCtr.ToString();
childElement.MaxOccursString = iOccCtr.ToString();
if (FixedValues.TryGetValue(childElement.Name.ToString(), out fixedValue))
childElement.FixedValue = fixedValue;
el = childElement;
}
//Add any element
XmlSchemaAny anyElement = new XmlSchemaAny();
anyElement.MinOccurs = 0;
anyElement.MaxOccurs = 1;
anyElement.ProcessContents = XmlSchemaContentProcessing.Lax;
anyElement.Parent = sequence;
sequence.Items.Add(anyElement);
}
}
}
return true;
}
संकलित स्कीमा का अंतिम परिणाम इस प्रकार है:
<?xml version=\"1.0\"?>
<xs:schema attributeFormDefault=\"unqualified\" elementFormDefault=\"unqualified\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">
<xs:element name=\"STEP\">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs=\"1\" maxOccurs=\"1\" fixed=\"0002\" name=\"LFDNR\" type=\"xs:unsignedByte\" />
<xs:element minOccurs=\"1\" maxOccurs=\"1\" name=\"FUNKTIONSNUMMER\" />
<xs:element minOccurs=\"1\" maxOccurs=\"1\" fixed=\"Firmwareinformationen lesen\" name=\"FUNKTIONSNAME\" type=\"xs:string\" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
आपकी सहायताके लिए धन्यवाद! Br मथायस
2 जवाब
आपकी समस्या पोस्ट संकलन संपत्ति के आपके उपयोग के कारण है। मदद के रूप में यह है:
सामग्री प्रकार के लिए कण। ContentType कण का पोस्ट-संकलन मूल्य।
सामान्य तौर पर, .NET के SOM API का उपयोग करने में एक संकेत उन गुणों की तलाश करना है जिनके पास एक सेटर भी है। "संकेत" कुछ गुण हैं क्योंकि दोनों हैं: पोस्ट संकलन, और उपयोगकर्ता कॉन्फ़िगर करने योग्य।
यदि आपके जटिल प्रकार की परिभाषा में एक स्पष्ट सामग्री मॉडल (विस्तार या प्रतिबंध) है, तो आपको XmlSchemaComplexType.ContentModel। यदि यह एक XmlSchemaComplexContent / है a>, इसका सामग्री संपत्ति (XmlSchemaComplexContentRestriction या XmlSchemaComplexContentExtension में से एक); इनमें से प्रत्येक प्रकार में एक कण गुण होता है, जिसे आप संशोधित कर सकते हैं।
अन्यथा, यदि कोई सामग्री मॉडल नहीं है, तो बस XmlSchemaComplexType.Particle।
ContentTypeParticle एक पोस्ट-संकलित संपत्ति है। केवल कुछ विशेषताओं जैसे- मिनट / अधिकतम-को संशोधित किया जा सकता है। नए नोड्स जोड़ने के लिए, इस मामले में किसी भी नोड की तरह, कण-संपत्ति को संशोधित किया जाना चाहिए। स्कीमा को पुन: प्रस्तुत करने और स्कीमासेट के पुन: संयोजन के बाद नया तत्व पोस्ट-संकलित ContentTypeParticle में जोड़ा जाएगा। @ पेट्रु-गार्डिया को धन्यवाद
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।