2011-12-05 10 views
6

मैं इंटरनेट पर देख रहा हूँ कैसे XML डेटा से गाड़ी वापसी रखने, लेकिन मैं इस सवाल का जवाब नहीं मिल सका पार्स करने से गाड़ी वापसी रखने के लिए, तो मैं यहाँ हूँ :)कैसे एक्सएमएल

उद्देश्य एक फ़ाइल में लिखने के लिए है एक एक्सएमएल डेटा की सामग्री। इसलिए, यदि नोड के मान में कुछ "\ r \ n" डेटा होता है, तो नई लाइन बनाने के लिए उन्हें नरम फ़ाइल में लिखने की आवश्यकता होती है, लेकिन यह अंतरिक्ष के साथ भी नहीं लिखती है: संरक्षित करें।

XElement xRootNode = new XElement("DOCS"); 
XElement xData = null; 

//XNamespace ns = XNamespace.Xml; 
//XAttribute spacePreserve = new XAttribute(ns+"space", "preserve"); 
//xRootNode.Add(spacePreserve); 

xData = new XElement("DOC"); 
xData.Add(new XAttribute("FILENAME", "c:\\titi\\prout.txt")); 
xData.Add(new XAttribute("MODE", "APPEND")); 
xData.Add("Hi my name is Baptiste\r\nI'm a lazy boy"); 

xRootNode.Add(xData); 

bool result = Tools.writeToFile(xRootNode.ToString()); 

और यहाँ मेरा प्रक्रिया वर्ग है:

यहाँ अपने परीक्षण वर्ग है

try 
{ 
    XElement xRootNode = XElement.Parse(xmlInputFiles); 
    String filename = xRootNode.Element(xNodeDoc).Attribute(xAttributeFilename).Value.ToString(); 
    Boolean mode = false; 
    try 
    { 
     mode = xRootNode.Element(xNodeDoc).Attribute(xWriteMode).Value.ToString().ToUpper().Equals(xWriteModeAppend); 
    } 
    catch (Exception e) 
    { 
     mode = false; 
    } 

    String value = xRootNode.Element(xNodeDoc).Value; 
    StreamWriter destFile = new StreamWriter(filename, mode, System.Text.Encoding.Unicode); 

    destFile.Write(value); 
    destFile.Close(); 

    return true; 
} 
catch (Exception e) 
{ 
    return false; 
} 

किसी को भी एक विचार है?

+0

आप में इस तरह के डेटा रखना चाहिए क्योंकि एक्सएमएल उन्हें पार्स करने के लिए कोशिश करेंगे कहते हैं। – Burimi

+0

यह कैसे करें? – BaptX

+0

यह एक एक्सएमएल पार्सर का काम है जो विभिन्न पंक्ति फ़ीड्स को सामान्यीकृत करने के लिए \ n। तो यह डिफ़ॉल्ट व्यवहार है। – Totonga

उत्तर

3

आप तत्व में CR LF की रक्षा या सामग्री को विशिष्ट जब एक XDocument या बचत करना चाहते हैं XElement सहायता से विशिष्ट XmlWriterSettingsNewLineHandling का उपयोग कर, अर्थात् द्वारा Entitize करने के लिए क्या कर सकते हैं:

 string fileName = "XmlOuputTest1.xml"; 

     string attValue = "Line1.\r\nLine2."; 
     string elementValue = "Line1.\r\nLine2.\r\nLine3."; 

     XmlWriterSettings xws = new XmlWriterSettings(); 
     xws.NewLineHandling = NewLineHandling.Entitize; 

     XDocument doc = new XDocument(new XElement("root", 
             new XAttribute("test", attValue), 
             elementValue)); 

     using (XmlWriter xw = XmlWriter.Create(fileName, xws)) 
     { 
      doc.Save(xw); 
     } 

     doc = XDocument.Load(fileName); 
     Console.WriteLine("att value: {0}; element value: {1}.", 
          attValue == doc.Root.Attribute("test").Value, 
          elementValue == doc.Root.Value); 

कि उदाहरण के मूल्य में संरक्षित कर रहे हैं नमूना के आउटपुट के रूप में बचत और लोडिंग की राउंड ट्रिप में "एट वैल्यू: ट्रू; एलिमेंट वैल्यू: ट्रू।"

+0

यह बहुत अच्छा काम करता है, धन्यवाद! –

0

कैरिज रिटर्न के साथ एक एक्सएमएल स्ट्रिंग को पार्स करने के लिए एक उपयोगी लिंक है, जिसमें लाइन फ़ीड्स है।

howto-correctly-parse-using-xelementparse-for-strings-that-contain-newline-character-in

यह जो लोग एक Xml स्ट्रिंग को पार्स कर रहे हैं मदद मिल सकती है।

जो लोग क्लिक करने के लिए परेशान नहीं किया जा सकता है के लिए यह एक XmlTextReader का उपयोग बजाय

XmlTextReader xtr = new XmlTextReader(new StringReader(xml)); 
    XElement items = XElement.Load(xtr); 
    foreach (string desc in items.Elements("Item").Select(i => (string)i.Attribute("Description"))) 
    { 
     Console.WriteLine("|{0}|", desc); 
    }