2011-12-05 46 views
6

我期待在互聯網上如何保持從XML數據回車,但我無法找到答案,所以我在這裏:)如何保持回車從解析XML

的目標是在一個文件中寫入XML數據的內容。因此,如果節點的值包含某些「\ r \ n」數據,則軟件需要將它們寫入文件以創建新行,但它不會寫入,即使使用space:preserve。

這裏是我的測試類:

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

你應該這樣的數據放到<![CDATA [「」]]>因爲XML將嘗試解析。 – Burimi

+0

如何做到這一點? – BaptX

+0

它是xml解析器的工作,用於將不同的換行標準化爲\ n。所以這是默認行爲。 – Totonga

回答

3

如果您想保留CR LF的元素或保存XDocument或當屬性內容XElement你可以通過使用某些XmlWriterSettings,即NewLineHandling到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); 

在該示例中的值將被保留在保存和加載的過程中,樣本的輸出爲「att value:True;元素值:True」。

+0

非常好,謝謝! –

0

繼承人一個有用的鏈接,我發現它用於解析帶carraige返回的Xml字符串,換行符。

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); 
    }