2011-12-05 8 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

XmlTextReaderクラスを使用しますと言います。 – Burimi

+0

これを行うには? – BaptX

+0

異なる改行を正規化するxmlパーサの仕事は\ nです。これはデフォルトの動作です。 – Totonga

答えて

3

あなたは要素でCR LFを維持するか、あなたが行うことができますXDocumentまたはXElementを保存するとき、すなわちNewLineHandling Entitizeに、一定のXmlWriterSettingsを使用していることをコンテンツ属性にしたい場合:

 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

Heres便利なリンク私はcarraigeの返品でXML文字列を解析するために見つけた便利なリンクです。

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

これは、XML文字列を解析している人たちを助けるかもしれません。それをクリックする気にすることはできません人のために

は、XMLは、それらを解析しようとするので、あなたは、<![CDATA [「」]]>に、このようなデータを配置する必要があります代わりに

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); 
    } 
関連する問題

 関連する問題