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

Drew DeVault sircmpwn at gmail.com
Mon Feb 6 10:19:06 UTC 2012


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



More information about the Mono-list mailing list