[Mono-list] Mono-Only XDocument.Save Error

Atsushi Eno atsushieno at veritas-vos-liberabit.com
Mon Feb 6 10:06:54 UTC 2012


No wonder it doesn't work - your "xml file" is not well formed, only 
contains XML declaration.

Also your repro code should be applied one liner fix that makes it very 
much helpful by *not* overwriting the same file which makes it 
impossible to examine the issue. You could just save XML into *another* 
file, so that everyone does not have to re-extract your archive over and 
over again.

Thanks,
Atsushi Eno

> I've narrowed the issue down - it only occurs when XDocument.Load is 
> used with LoadOptions.PreserveWhitespace.  I've uploaded an example 
> demonstrating this error.  The relevant XML file is in /bin/Debug.
> http://sircmpwn.users.sf.net/uploads/0TestXDocument.tar.gz
>
> -- 
> Drew "Sir Cmpwn" DeVault
>
> On 02/06/2012 12:14 AM, Atsushi Eno wrote:
>> I have one doubt that I think is likely the cause of the problem and 
>> also that prevents me from verifying it: you seem to have non-ASCII 
>> character in your XML you pasted in the message. This could be cause 
>> of the error e.g. inconsistent encoding input/output. A reproducible 
>> test case that everyone can examine is appreciated.
>>
>> Atsushi Eno
>>
>>
>>> I can duplicate this problem on Linux Mint 12 and Ubuntu 11.10, but 
>>> Microsoft.NET on Windows 7 does not have the issue. The issue is 
>>> that my XDocument becomes corrupted the moment it loads, and cannot 
>>> be saved. Strangely, I am able to traverse it and manipulate it in 
>>> memory. The following code:
>>>
>>> Stream s = File.Open("example.xml", FileMode.Open);
>>> XDocument d = XDocument.Load(s);
>>> s.Close();
>>> d.Save("example.xml");
>>>
>>> Produces the following exception:
>>>
>>> [23:19:05] PartyCraft.CurrentDomain_UnhandledException: Error: 
>>> InvalidOperationException: This XmlWriter does not accept Text at 
>>> this state Prolog.
>>> [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.XNode.ToString (SaveOptions options) [0x00000] in 
>>> <filename unknown>:0
>>> at System.Xml.Linq.XNode.ToString () [0x00000] in <filename unknown>:0
>>> at PartyCraftServer.XmlSettings.set_Item (System.String key, 
>>> System.String value) [0x00000] in <filename unknown>:0
>>> at PartyCraftServer.Commands.SettingCommand.ExecuteCommand 
>>> (LibMinecraft.Server.RemoteClient client, System.String[] 
>>> parameters) [0x00000] in <filename unknown>:0
>>> at PartyCraftServer.Commands.Command.Execute 
>>> (LibMinecraft.Server.RemoteClient client, System.String command) 
>>> [0x00000] in <filename unknown>:0
>>> at PartyCraftServer.PartyCraft.Run () [0x00000] in <filename unknown>:0
>>> at PartyCraftServer.Program.Main (System.String[] args) [0x00000] in 
>>> <filename unknown>:0
>>>
>>> The same exception occurs on d.ToString();
>>>
>>> The XML that is being loaded looks like this:
>>>
>>> <?xml version="1.0" encoding="utf-8" ?>
>>> <partyCraft>
>>> <server maxplayers="100">
>>> <motd>PartyCraft Test Server</motd>
>>> <messages>
>>> <death>
>>> <!--TODO-->
>>> <suicide>§e{0} killed themselves.</suicide>
>>> <creeper>§e{0} looked at a creeper funny.</creeper>
>>> </death>
>>> </messages>
>>> </server>
>>>
>>> <command>
>>> <alias>
>>> <setting>s</setting>
>>> </alias>
>>> </command>
>>>
>>> <plugins>
>>> <!--TODO-->
>>> <plugin>TestPlugin.dll</plugin>
>>> </plugins>
>>> </partyCraft>
>>>
>>> And when saved, even though an exception occurs, the document is 
>>> overwritten with this:
>>>
>>> <?xml version="1.0" encoding="utf-8" ?>
>>>
>>> This is the output from mono --version:
>>>
>>> Mono JIT compiler version 2.10.5 (Debian 2.10.5-1)
>>> Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. 
>>> www.mono-project.com
>>> TLS: __thread
>>> SIGSEGV: altstack
>>> Notifications: epoll
>>> Architecture: amd64
>>> Disabled: none
>>> Misc: softdebug
>>> LLVM: supported, not enabled.
>>> GC: Included Boehm (with typed GC and Parallel Mark)
>>>
>>> Any help would be appreciated.
>>>
>>> -- 
>>> Drew "Sir Cmpwn" DeVault
>>> _______________________________________________
>>> Mono-list maillist  -  Mono-list at lists.ximian.com
>>> http://lists.ximian.com/mailman/listinfo/mono-list
>>
>> _______________________________________________
>> Mono-list maillist  -  Mono-list at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-list
>
> _______________________________________________
> Mono-list maillist  -  Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list



More information about the Mono-list mailing list