2008-12-02 17 views
12

से नेमस्पेस और स्कीमा के साथ एक्सएमएल बनाना एक लंबे समय से सवाल - कृपया मेरे साथ भालू!XElement

मैं प्रोग्रामिक रूप से नामस्थान और स्कीमा के साथ एक XML दस्तावेज़ बनाना चाहता हूं। जैसे

<myroot 
    xmlns="http://www.someurl.com/ns/myroot" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.someurl.com/ns/myroot http://www.someurl.com/xml/schemas/myschema.xsd"> 

    <sometag>somecontent</sometag> 

</myroot> 

मैं नहीं बल्कि शानदार नए LINQ सामान (जो मेरे लिए नया है) का उपयोग कर रहा है, और एक XElement का उपयोग करके उपरोक्त करने के लिए उम्मीद कर रही थी कुछ।

public XElement ToXElement() 
    { 
    XNamespace xnsp = "http://www.someurl.com/ns/myroot"; 

    XElement xe = new XElement(
     xnsp + "myroot", 
      new XElement(xnsp + "sometag", "somecontent") 
     ); 

    return xe; 
    } 

जो मुझे नाम स्थान सही ढंग से देता है, इस प्रकार:

<myroot xmlns="http://www.someurl.com/ns/myroot"> 
    <sometag>somecontent</sometag> 
</myroot> 

मेरा प्रश्न: कैसे मैं स्कीमा xmlns जोड़ सकते हैं

मैं अपने वस्तु पर एक ToXElement() विधि मिल गया है : xsi और xsi: schemaLocation विशेषताएँ?

(BTW मैं सरल XAtttributes उपयोग नहीं कर सकते के रूप में मैं पेट के प्रयोग करने के लिए कोई त्रुटि मिलती है ":" एक विशेषता नाम पर ...)

या मैं एक XDocument या कुछ अन्य LINQ वर्ग का उपयोग करने की आवश्यकता है ?

धन्यवाद ...

उत्तर

7

इस article से, ऐसा लगता है कि आप नए ऊपर एक से अधिक XNamespace, जड़ में एक विशेषता जोड़ने के लिए, और फिर दोनों XNamespaces के साथ शहर के लिए जाना लग रहा है।

// The http://www.adventure-works.com namespace is forced to be the default namespace. 
XNamespace aw = "http://www.adventure-works.com"; 
XNamespace fc = "www.fourthcoffee.com"; 
XElement root = new XElement(aw + "Root", 
    new XAttribute("xmlns", "http://www.adventure-works.com"), 
/////////// I say, check out this line. 
    new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"), 
/////////// 
    new XElement(fc + "Child", 
     new XElement(aw + "DifferentChild", "other content") 
    ), 
    new XElement(aw + "Child2", "c2 content"), 
    new XElement(fc + "Child3", "c3 content") 
); 
Console.WriteLine(root); 

यहाँ एक forum post कैसे schemalocation करने के लिए दिखा है।

7

डेविड B के लिए धन्यवाद - मैं काफी यकीन है कि मैं यह सब समझ में नहीं कर रहा हूँ, लेकिन इस कोड मुझे हो जाता है कि मैं क्या जरूरत है ...

public XElement ToXElement() 
    { 
    const string ns = "http://www.someurl.com/ns/myroot"; 
    const string w3 = "http://wwww.w3.org/2001/XMLSchema-instance"; 
    const string schema_location = "http://www.someurl.com/ns/myroot http://www.someurl.com/xml/schemas/myschema.xsd"; 

    XNamespace xnsp = ns; 
    XNamespace w3nsp = w3; 

    XElement xe = new XElement(xnsp + "myroot", 
      new XAttribute(XNamespace.Xmlns + "xsi", w3), 
      new XAttribute(w3nsp + "schemaLocation", schema_location), 
      new XElement(xnsp + "sometag", "somecontent") 
     ); 

    return xe; 
    } 

ऐसा लगता है कि एक नाम स्थान के साथ साथ एक स्ट्रिंग जैसे श्रृंखलाबद्ध

w3nsp + "schemaLocation"
एक देता है परिणामी एक्सएमएल में
xsi:schemaLocation
नामक विशेषता, जो मुझे चाहिए।

संबंधित मुद्दे