簡體   English   中英

如何避免回車解析XML

[英]How keep carriage return from parsing XML

我在Internet上尋找如何保持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;
}

有人有主意嗎?

如果要在保存XDocumentXElement時保留元素或屬性內容的NewLineHandling ,則可以使用某些XmlWriterSettings ,即使用NewLineHandling進行初始化:

        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值:True;元素值:True”。

這是一個有用的鏈接,我找到了用於解析帶有Carraige返回值,換行符的Xml字符串的鏈接。

如何正確地使用xelementparse來解析包含換行符的字符串

它可能會幫助那些正在解析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);
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM