2016-05-09 3 views
6

से गतिशील रूप से एक यम दस्तावेज़ बनाएं, क्या यमल डॉटनेट या दूसरी लाइब्रेरी के साथ सी # से गतिशील रूप से एक यम दस्तावेज़ तैयार करना संभव है?सी #

मैं समझता हूं कि यह क्रमबद्धरण का उपयोग करके कैसे किया जा सकता है, हालांकि किसी ऑब्जेक्ट संरचना से शुरू करने की आवश्यकता होती है।

मैं फ्लाई पर यमल दस्तावेज़ नोड्स बनाने का एक तरीका ढूंढ रहा हूं, जैसा कि आप XElement का उपयोग कर एक्सएमएल के साथ करेंगे। उदाहरण के लिए जोड़ें (ऑब्जेक्ट) विधि।

उत्तर

3

आप YamlDotNet का उपयोग करके ऐसा कर सकते हैं। आप YamlStream बनाकर शुरू करते हैं, इसमें एक या अधिक document जोड़ें, फिर आप sequences, mappings और scalars जोड़ सकते हैं।

Here is an example on how to do it:

var address = new YamlMappingNode(
    new YamlScalarNode("street"), 
    new YamlScalarNode("123 Tornado Alley\nSuite 16") { Style = YamlDotNet.Core.ScalarStyle.Literal }, 
    new YamlScalarNode("city"), 
    new YamlScalarNode("East Westville"), 
    new YamlScalarNode("state"), 
    new YamlScalarNode("KS") 
) { Anchor = "main-address" }; 

var stream = new YamlStream(
    new YamlDocument(
     new YamlMappingNode(
      new YamlScalarNode("repeipt"), 
      new YamlScalarNode("Oz-Ware Purchase Invoice"), 
      new YamlScalarNode("date"), 
      new YamlScalarNode("2007-08-06"), 
      new YamlScalarNode("customer"), 
      new YamlMappingNode(
       new YamlScalarNode("given"), 
       new YamlScalarNode("Dorothy"), 
       new YamlScalarNode("family"), 
       new YamlScalarNode("Gale") 
      ), 
      new YamlScalarNode("items"), 
      new YamlSequenceNode(
       new YamlMappingNode(
        new YamlScalarNode("part_no"), 
        new YamlScalarNode("A4786"), 
        new YamlScalarNode("descrip"), 
        new YamlScalarNode("Water Bucket (Filled)"), 
        new YamlScalarNode("price"), 
        new YamlScalarNode("1.47"), 
        new YamlScalarNode("quantity"), 
        new YamlScalarNode("4") 
       ), 
       new YamlMappingNode(
        new YamlScalarNode("part_no"), 
        new YamlScalarNode("E1628"), 
        new YamlScalarNode("descrip"), 
        new YamlScalarNode("High Heeled \"Ruby\" Slippers"), 
        new YamlScalarNode("price"), 
        new YamlScalarNode("100.27"), 
        new YamlScalarNode("quantity"), 
        new YamlScalarNode("1") 
       ) 
      ), 
      new YamlScalarNode("bill-to"), address, 
      new YamlScalarNode("ship-to"), address, 
      new YamlScalarNode("specialDelivery"), 
      new YamlScalarNode("Follow the Yellow Brick\n" + 
           "Road to the Emerald City.\n" + 
           "Pay no attention to the\n" + 
           "man behind the curtain.") 
      { 
       Style = YamlDotNet.Core.ScalarStyle.Literal 
      } 
     ) 
    ) 
); 
+0

क्या आप एक उदाहरण प्रदान कर सकते हैं? मैं दस्तावेज़ पर चीजों को जोड़ने के लिए कोई विधि नहीं देख सकता। – sparkplug

+0

मुझे पता है, यह वाक्यविन्यास बेकार है। पुल-अनुरोध का स्वागत है! –

+0

उदाहरण के लिए धन्यवाद - मैंने नोड को कन्स्ट्रक्टर में पास करने के बारे में नहीं सोचा था। एक पुल अनुरोध अब मेरी टू-डू सूची पर है। – sparkplug

2

मैं अब बाहर काम किया है इस Yaml.Net का उपयोग कर कैसे करना है। लोड() विधि का उपयोग कर YamlStream को कुछ प्रारंभिक सामग्री के साथ लोड करने की आवश्यकता है।

const string initialContent = "---\nversion: 1\n..."; 

var sr = new StringReader(initialContent); 
var stream = new YamlStream(); 
stream.Load(sr); 

फिर आप YamlMappingNode को YamlDocument जो एक विधि जोड़ें है की RootNode डाली कर सकते हैं।

var rootMappingNode = (YamlMappingNode)stream.Documents[0].RootNode; 
rootMappingNode.Add("shout", "yay!"); 

फिर आप नोड प्रकार की एक किस्म को सहेजने से पहले जोड़ सकते हैं: @Antoine ऑब्री के Yaml.Net बनाने के लिए

version: 1 
shout: yay! 
itemWithProps: 
    prop1: value1 
    prop2: value2 
sequenceOfItems: 
- prop1: value1 
    prop2: value2 
- prop1: value1 
    prop2: value2 
- collection: [a, b, c] 
... 

धन्यवाद:

var props = new YamlMappingNode(); 
props.Add("prop1", "value1"); 
props.Add("prop2", "value2"); 
rootMappingNode.Add("itemWithProps", props); 

var props2 = new YamlMappingNode(); 
props2.Add("prop1", "value1"); 
props2.Add("prop2", "value2"); 

var props3 = new YamlMappingNode(); 
props3.Add("prop1", "value1"); 
props3.Add("prop2", "value2"); 

var seq = new YamlSequenceNode(); 
seq.Add(props2); 
seq.Add(props3); 
rootMappingNode.Add("sequenceOfItems", seq); 

var col = new YamlSequenceNode(); 
col.Style = SequenceStyle.Flow; 
col.Add("a"); 
col.Add("b"); 
col.Add("c"); 

var seqMapping = new YamlMappingNode(); 
seqMapping.Add("collection", col); 
seq.Add(seqMapping); 

using (TextWriter writer = File.CreateText("C:\\temp\\test.yaml")) 
    stream.Save(writer, false); 

इस उदाहरण से उत्पादन होता है और अस्पष्टता से मुझे सही दिशा में इंगित कर रहा है।