2012-02-06 5 views
5

で失敗し、次のコードは、任意のXMLドキュメントに失敗します。XDocument.LoadはLoadOptions.PreserveWhitespaceを使用する場合にのみ起こるモノ - XDocument.Loadはモノラルバージョン2.10.5を使用してLoadOptions.PreserveWhitespace

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.IO; 
using System.Xml.Linq; 

namespace TestXDocument 
{ 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      Stream s = File.Open("Settings.xml", FileMode.Open); 
      XDocument d = XDocument.Load(s, LoadOptions.PreserveWhitespace); 
      s.Close(); 
      d.Save("Settings.xml"); 
     } 
    } 
} 

。どのようにこれを回避するか、または問題を解決する上で任意のアイデア?

Linux Mint 12およびUbuntu 11.10でテスト済みです。ここで

は例外です:

Unhandled Exception: System.InvalidOperationException: This XmlWriter does not accept Text at this state Prolog. 
    at System.Xml.XmlTextWriter.ShiftStateContent (System.String occured, Boolean allowAttribute) [0x00000] in <filename unknown>:0 
    at System.Xml.XmlTextWriter.WriteString (System.String text) [0x00000] in <filename unknown>:0 
    at System.Xml.DefaultXmlWriter.WriteString (System.String text) [0x00000] in <filename unknown>:0 
    at System.Xml.Linq.XText.WriteTo (System.Xml.XmlWriter w) [0x00000] in <filename unknown>:0 
    at System.Xml.Linq.XDocument.WriteTo (System.Xml.XmlWriter w) [0x00000] in <filename unknown>:0 
    at System.Xml.Linq.XDocument.Save (System.Xml.XmlWriter w) [0x00000] in <filename unknown>:0 
    at System.Xml.Linq.XDocument.Save (System.String filename, SaveOptions options) [0x00000] in <filename unknown>:0 
    at System.Xml.Linq.XDocument.Save (System.String filename) [0x00000] in <filename unknown>:0 
    at TestXDocument.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidOperationException: This XmlWriter does not accept Text at this state Prolog. 
    at System.Xml.XmlTextWriter.ShiftStateContent (System.String occured, Boolean allowAttribute) [0x00000] in <filename unknown>:0 
    at System.Xml.XmlTextWriter.WriteString (System.String text) [0x00000] in <filename unknown>:0 
    at System.Xml.DefaultXmlWriter.WriteString (System.String text) [0x00000] in <filename unknown>:0 
    at System.Xml.Linq.XText.WriteTo (System.Xml.XmlWriter w) [0x00000] in <filename unknown>:0 
    at System.Xml.Linq.XDocument.WriteTo (System.Xml.XmlWriter w) [0x00000] in <filename unknown>:0 
    at System.Xml.Linq.XDocument.Save (System.Xml.XmlWriter w) [0x00000] in <filename unknown>:0 
    at System.Xml.Linq.XDocument.Save (System.String filename, SaveOptions options) [0x00000] in <filename unknown>:0 
    at System.Xml.Linq.XDocument.Save (System.String filename) [0x00000] in <filename unknown>:0 
    at TestXDocument.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0 
+2

Monoの問題を公式のbugzilla(http://www.mono-project.com/Bugs)で報告する方法を学ぶ必要があります –

+0

質問がありますか? – sehe

+0

ここでの質問です:どのように私はそれを解決するか、回避することができます。 –

答えて

3

私はUbuntuの11.10で両方のコード例では、同じ問題を再現することができます。あなたが言ったように、Windowsプラットフォームには何の問題もありません。 Monoランタイムには、XDocumentのSaveメソッドに特定のバグがあり、予期しないエラーが発生するようです。この問題は、ソフトウェアパッチのMonoランタイムチームに報告したいと思います。

しかし、私はここに持って来ることができる可能な回避策がある、

d.Root.Save("Settings1.xml"); 

我々がXDocumentに遭遇としてのXElementのSaveメソッドがすべての問題を持っていないようです。

+0

すてきな回避策。ありがとう!注意するには、 'PreserveWhitespace'オプションは' 'を' 'に変換しているので、元のファイルの完全な空白表現ではありません。私はWindows上でこれをチェックしていません.Macでは 'Mono 2.10.9'を使用しています。 – cod3monk3y

+0

残念ながら、これは私にとってはうまくいかないでしょう。 'Info.plist'ファイルはDOCTYPEタグ' <!DOCTYPE plist PUBLIC ... 'で始まり、' d.Root.Save'で保存されません。 'LoadOptions.None'に戻ると思います! – cod3monk3y

関連する問題