[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