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

Atsushi Eno atsushieno at veritas-vos-liberabit.com
Tue Feb 7 06:25:15 UTC 2012


Thanks for the updated test. Now I confirmed and fixed the issue in 
master 40f84f3.

Atsushi Eno

Drew DeVault wrote:
> Sorry - the poorly-formatted XML issue was an oversight on my part; 
> it's actually the result of running the program.  I have also modified 
> it to save to a new file instead.
> Here is the new version: 
> http://sircmpwn.users.sf.net/uploads/1TestXDocument.tar.gz
>
> -- 
> Drew "Sir Cmpwn" DeVault
>
> On 02/06/2012 03:06 AM, Atsushi Eno wrote:
>> 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
>>
>> _______________________________________________
>> 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