2009-11-24 8 views
5

में इस एक्सएमएल का निर्माण होगा मैं इस सरल देख एक्सएमएल उत्पन्न करने के लिए, एक साफ जिस तरह से यह उत्पन्न करने के लिए की तलाश में की जरूरत है।कैसे आप #

<order> 
<user>2343></user> 
<creditcardtype>2333></creditcarttype> 
<country>USA</country> 
<orderDetails> 
    <amount>23434</amount> 
    <shipping>32</shipping> 
</orderDetails> 
</order> 
+1

किसी भी कारण से भी आपको प्रयोक्ता आईडी जैसी चीजों के पतन नहीं होगा गुणों में? अर्थात्: '<आदेश उपयोगकर्ता =" 2343 "> ...' –

+0

वह एक गैर साबुन वेब सेवा बुला रहा है, तो वह एक ऐसे प्रारूपित एक्सएमएल आवश्यकता हो सकती है। –

+0

प्रारूप मेरे हाथों में असुविधा नहीं है। – mrblah

उत्तर

11

XDocument के बाद की तरह लिया जाता है, यहाँ एक है XmlWriter जवाब:

StringWriter sw = new StringWriter(); 
    using (XmlWriter xw = XmlWriter.Create(sw)) { 
     xw.WriteStartElement("order"); 
     xw.WriteElementString("user", "2343"); 
     xw.WriteElementString("creditcardtype", "2333"); 
     xw.WriteElementString("country", "USA"); 
     xw.WriteStartElement("orderDetails"); 
     xw.WriteElementString("amount", "23434"); 
     xw.WriteElementString("shipping", "32"); 
     xw.WriteEndElement(); 
     xw.WriteEndElement(); 
    } 
    string s = sw.ToString(); 

या XmlSerializer साथ:

[XmlRoot("order")] public class Order { 
    [XmlElement("user")] public int User { get; set; } 
    [XmlElement("creditcardtype")] public int CreditCardType { get; set; } 
    [XmlElement("country")] public string Country { get; set; } 
    [XmlElement("orderDetails")] public OrderDetails Details { get; set; } 
} 
public class OrderDetails { 
    [XmlElement("amount")] public int Amount { get; set; } 
    [XmlElement("shipping")] public int Shipping { get; set; } 
} 
.... 
var order = new Order { 
    User = 2343, CreditCardType = 2333, Country = "USA", 
    Details = new OrderDetails { 
     Amount = 23434, 
     Shipping = 32 
    } 
}; 
XmlSerializer ser = new XmlSerializer(order.GetType()); 
StringWriter sw = new StringWriter(); 
ser.Serialize(sw, order); 
string s = sw.ToString(); 
+0

मुझे पूरा यकीन है कि XmlWriter विधि भी सबसे तेज़ है, कम से कम यह मेरे द्वारा किए गए मानकों पर आधारित है। डब्लूसीएफ डाटाकंट्रैक्ट सीरिएलाइज़र भी तेज़ है, अगर आप एक्सएमएल को सीधे उत्पन्न करने के बजाय ऑब्जेक्ट मॉडल को क्रमबद्ध करना चाहते हैं। –

+0

+10 से मार्क .. न केवल उत्तर के लिए बल्कि दोनों दृष्टिकोणों को समझाने के प्रयास भी ले रहे हैं। – Dienekes

4

ऐसा करने के लिए LINQ to XMl तरह से, इस

XDocument doc = new XDocument(new XElement("order", 
        new XElement("user", "2343"), 
        new XElement("creditcardtype", "2333"), 
        new XElement("country", "USA"), 
       new XElement("orderDetails", 
        new XElement("amount", "23434"), 
        new XElement("shipping", "32")))); 
doc.Save("myxml.xml"); 
2
XmlDocument xml = new XmlDocument(); 

XmlElement order = xml.CreateElement("order"); 

xml.AppendChild(order); 

XmlElement user = xml.CreateElement("user"); 
user.InnerText = "2343"; 
order.AppendChild(user); 

XmlElement ccType = xml.CreateElement("creditcardtype"); 
ccType.InnerText = "2333"; 
order.AppendChild(ccType); 

आदि

11

उपयोग XDocument वर्ग की तरह कुछ देखते हैं, तो कोड होगा

XDocument srcTree = new XDocument(
    new XElement("order", 
     new XElement("user", "2343"), 
     new XElement("creditcardtype", "2333"), 
     new XElement("country", "USA"), 
     new XElement("orderDetails", 
      new XElement ("amount", "23434"), 
      new XElement ("shipping", "32") 

     ) 
    ) 
); 
1
  1. एक XML स्कीमा अपनी संरचना का वर्णन लिखें। (आप भी xsd.exe का उपयोग स्वचालित रूप से किसी दिए गए एक्सएमएल फ़ाइल के अनुसार स्कीमा उत्पन्न करने के लिए कर सकते हैं।)
  2. उपयोग xsd.exe /classes अपने XML स्कीमा के अनुसार सी # वर्गों genereate करने के लिए।
  3. अब आप को क्रमानुसार/एक सी # वस्तु संरचना करने के लिए/से अपने XML deserialize करने के लिए XmlSerializer वर्ग का उपयोग कर सकते हैं।

इस दृष्टिकोण का वर्णन करने वाले codeproject article भी है।

+0

यह उल्लेख किए गए सभी की सबसे धीमी विधि के बारे में भी है। –

+1

मुझे लगता है कि XmlDocument दृष्टिकोण भी धीमी है ... वैसे भी, क्या मैं इसके बारे में की तरह है कि सब कुछ दृढ़ता से लिखा गया हो और तुम भी एक स्कीमा सत्यापन कर सकता है। – Vinz

0

मैं एक्सएमएल सुझाव के लिए Linq के साथ जाना चाहते हैं, लेकिन पूर्णता के लिए मैं सिर्फ जोड़ने के लिए यह एक:

var xe = XElement.Parse("<order><user>2343</user><creditcardtype>2333</creditcarttype><country>USA</country><orderDetails><amount>23434</amount><shipping>32</shipping></orderDetails></order>"); 

:)