[mapguide-users] Modify mapdefinition in a layout

Kenneth Skovhede, GEOGRAF A/S ks at geograf.dk
Thu Mar 19 13:11:11 EDT 2009


It looks like it is bad, I try not to deal with xml as text strings.
You can do this instead:
System.IO.MemoryStream ms = new System.IO.MemoryStream();
doc.Save(ms);
byte[] encodedBytes = ms.ToArray();

No encoding stuff needed, and you get the document as it would look when 
written to a file.
Unfortunately this seems to add the BOM, which breaks MapGuide.
In the MaestroAPI, I use this class:
http://svn.osgeo.org/mapguide/trunk/Tools/Maestro/MaestroAPI/Utf8XmlWriter.cs

Regards, Kenneth Skovhede, GEOGRAF A/S



euskalmap skrev:
> When i load the xml with this instruction : 
>     XmlDocument doc = new XmlDocument();
>    String xmlLayoutDef = byteReader.ToString();
> there is the preamble <?xml version="1.0" encoding="utf-8"?>
> Later, the instruction
>     String xmlString = doc.DocumentElement.OuterXml;
> remove the preamble.
> Other information : if i load the file 
> http://patxi.mayol.free.fr/Untitled1.xml
> http://patxi.mayol.free.fr/Untitled1.xml  in an editor XML like altova, for
> example, i have this message when i want to save it : This file is not
> valid: Unable to load schema with target namespace " from
> 'WebLayout-1.0.0.xsd''.
> So, is this instruction String xmlString = doc.DocumentElement.OuterXml; bad
> ? I have find in sample on the forum?
>
> What you think about it?.
> Thanks
>
> Kenneth Skovhede, GEOGRAF A/S wrote:
>   
>> Ok, that file does not have the preamble (the "<?xml version=\"1.0\" 
>> encoding=\"utf-8\"?>" string).
>> Not sure if it fixes your problem if you add it, but its worth a try.
>>
>> The line mentioned seems to only check that the first element 
>> (WebLayout) matches the xsd file (WebLayout).
>>
>> I wrote about the doublequote, because there was a line with:
>> char doublequote = (char)34;
>> which works, but is not very intuitive and suggests that someone did not 
>> know how to escape doublequotes.
>>
>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>
>>
>>
>> euskalmap skrev:
>>     
>>> I have do 
>>>   using(System.IO.FileStream fs = System.IO.File.Create("test.xml"))
>>>   fs.Write(encodedDefinition, 0, encodedDefinition.Length);
>>>
>>> The result is here :  http://patxi.mayol.free.fr/test.xml
>>> http://patxi.mayol.free.fr/test.xml 
>>>
>>> How know that my document have the utf-8 xml preamble ?
>>>
>>> About the string "xmlns=\"namespace\"", i have not this in my xml file.
>>> Thanks
>>>
>>>
>>>
>>> Kenneth Skovhede, GEOGRAF A/S wrote:
>>>   
>>>       
>>>> I'm am a bit puzzled by this:
>>>>
>>>> String xmlString = doc.DocumentElement.OuterXml; 
>>>> ...
>>>> "After modif = \ n "+"<? xml version ='1 .0 'encoding =' UTF-8'?>"+
>>>> xmlString
>>>>
>>>> It seems that the xmlString is missing the xml preamble?
>>>> Just to clarify: the document MUST have the utf-8 xml preamble, and MUST 
>>>> NOT have the utf-8 BOM.
>>>>
>>>> The file you sent does not appear to be made from the encoded data.
>>>> You must do something like:
>>>> using(System.IO.FileStream fs = System.IO.File.Create("test.xml"))
>>>>   fs.Write(encodedDefinition, 0, encodedDefinition.Length);
>>>>
>>>> Otherwise there are too many places that can introduce small
>>>> differences.
>>>>
>>>> btw, in C#, you can make a string with quotes like this:
>>>> "xmlns=\"namespace\""
>>>> or
>>>> @"xmlns=""namespace""" //VB style
>>>>
>>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>>
>>>>
>>>>
>>>> euskalmap skrev:
>>>>     
>>>>         
>>>>> The file is generate in my code after the instruction
>>>>> 'resourceSrvc.SetResource(webLayoutId, contentByteSource.GetReader(),
>>>>> null);' So, i do not understand why the file is fine and my
>>>>> mapdefinition
>>>>> in
>>>>> my layout generate the error An exception occurred in the XML parser.
>>>>>
>>>>> If you have few minutes you can see the trace of my function
>>>>> ag_SetLayoutMap
>>>>> here :  http://patxi.mayol.free.fr/Trace.htm
>>>>> http://patxi.mayol.free.fr/Trace.htm 
>>>>> and a sample of my C# code here : 
>>>>> http://patxi.mayol.free.fr/sample.asp
>>>>> http://patxi.mayol.free.fr/sample.asp , who is describe the
>>>>> ag_SetLayoutMap
>>>>> function.
>>>>> thanks
>>>>> regards, Francis
>>>>>
>>>>> Kenneth Skovhede, GEOGRAF A/S wrote:
>>>>>   
>>>>>       
>>>>>           
>>>>>> Is this a question?
>>>>>>
>>>>>> The un-edited file loads fine for me.
>>>>>>
>>>>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>>>>
>>>>>>
>>>>>>
>>>>>> euskalmap skrev:
>>>>>>     
>>>>>>         
>>>>>>             
>>>>>>> Hi,
>>>>>>> I have not send the good link of my file; in the previous version , i
>>>>>>> have
>>>>>>> trying to delete in the xml the string
>>>>>>> "xsi:noNamespaceSchemaLocation="WebLayout-1.0.0.xsd".
>>>>>>> So, my file is :  http://patxi.mayol.free.fr/Untitled1.xml
>>>>>>> http://patxi.mayol.free.fr/Untitled1.xml 
>>>>>>>
>>>>>>> So i test GetResourceContent rather than SetResource : 
>>>>>>> If i try  http://localhost/mapguide/mapagent/index.html
>>>>>>> http://localhost/mapguide/mapagent/index.html  with
>>>>>>> GetResourceContent
>>>>>>> on
>>>>>>> "Library://Ag Base/Mpg Urbanisme.WebLayout" and submit, i have this
>>>>>>> result : 
>>>>>>>
>>>>>>> http://n2.nabble.com/file/n2490672/test.jpg 
>>>>>>>
>>>>>>> The message in header, in french, is in english : This file XML does
>>>>>>> not
>>>>>>> seem to have of information of style associated with him. The tree of
>>>>>>> the
>>>>>>> document is shown below.
>>>>>>>
>>>>>>> SO
>>>>>>>
>>>>>>> Kenneth Skovhede, GEOGRAF A/S wrote:
>>>>>>>   
>>>>>>>       
>>>>>>>           
>>>>>>>               
>>>>>>>> A bit tricky, something to do with how .Net handles Xml I think.
>>>>>>>>
>>>>>>>> The document is missing the attribute:
>>>>>>>> xsi:noNamespaceSchemaLocation="WebLayout-1.0.0.xsd"
>>>>>>>>
>>>>>>>> Which is required, because it is used for versioning and validation.
>>>>>>>> If you take your document and open this page:
>>>>>>>> http://localhost/mapguide/mapagent/index.html
>>>>>>>>
>>>>>>>> Then click "Resource" -> "SetResource", point out the file,
>>>>>>>> and in the "ResourceID" field type: "Library://mytest.WebLayout".
>>>>>>>>
>>>>>>>> Then set the "Content" field to point to the file and click submit.
>>>>>>>> You will see the error you mention.
>>>>>>>>
>>>>>>>> Now add the above attribute, so the second line in the document
>>>>>>>> becomes:
>>>>>>>> <WebLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
>>>>>>>> xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
>>>>>>>> xsi:noNamespaceSchemaLocation="WebLayout-1.0.0.xsd">
>>>>>>>>
>>>>>>>> Save the document, click back in the browser, and then "Submit" once
>>>>>>>> more.
>>>>>>>> This time it works. (Remember to check that the ResourceID and
>>>>>>>> Content 
>>>>>>>> field has not been reset).
>>>>>>>>
>>>>>>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> euskalmap skrev:
>>>>>>>>     
>>>>>>>>         
>>>>>>>>             
>>>>>>>>                 
>>>>>>>>> Hi,
>>>>>>>>> Yes, i have see the log file, but there is no more information that
>>>>>>>>> 'XML
>>>>>>>>> Parser error'.
>>>>>>>>> The logfile is :
>>>>>>>>> http://n2.nabble.com/file/n2474100/logfile.jpg 
>>>>>>>>>
>>>>>>>>> About the XML file, after modification i have this file : 
>>>>>>>>> http://patxi.mayol.free.fr/mytest.xml
>>>>>>>>> http://patxi.mayol.free.fr/mytest.xml 
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks
>>>>>>>>> regards
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Kenneth Skovhede, GEOGRAF A/S wrote:
>>>>>>>>>   
>>>>>>>>>       
>>>>>>>>>           
>>>>>>>>>               
>>>>>>>>>                   
>>>>>>>>>> Did you look in the error.log file?
>>>>>>>>>> Could you try to save the xml document after modification, and
>>>>>>>>>> send
>>>>>>>>>> a 
>>>>>>>>>> link to it?
>>>>>>>>>>
>>>>>>>>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> euskalmap skrev:
>>>>>>>>>>     
>>>>>>>>>>         
>>>>>>>>>>             
>>>>>>>>>>                 
>>>>>>>>>>                     
>>>>>>>>>>> Hi,
>>>>>>>>>>> In fact, before modification, i have 
>>>>>>>>>>> MgResourceIdentifier webLayoutId = new
>>>>>>>>>>> MgResourceIdentifier(pst_weblayout) 
>>>>>>>>>>> with pst_weblayout = "Library://Ag Base/MyLayout.WebLayout" 
>>>>>>>>>>> I search the xml node for modify Mapdefinition resource and 
>>>>>>>>>>> after modification i have in instruction 
>>>>>>>>>>> webLayoutId = new MgResourceIdentifier(str_NewMapDefinition) 
>>>>>>>>>>> with str_NewMapDefinition=Session:xxxxxxxxx//MyMap.MapDefinition
>>>>>>>>>>> So, i set the resource and i have the message 'An exception
>>>>>>>>>>> occurred
>>>>>>>>>>> in
>>>>>>>>>>> the
>>>>>>>>>>> XML parser.'
>>>>>>>>>>> I say it is simply to migrate vb to c#, but before i want to
>>>>>>>>>>> understand.
>>>>>>>>>>> I have use same sample who use this method on the forum; but i do
>>>>>>>>>>> not
>>>>>>>>>>> explain where is my bug?
>>>>>>>>>>> thanks a lot for your help
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Kenneth Skovhede, GEOGRAF A/S wrote:
>>>>>>>>>>>   
>>>>>>>>>>>       
>>>>>>>>>>>           
>>>>>>>>>>>               
>>>>>>>>>>>                   
>>>>>>>>>>>                       
>>>>>>>>>>>> It is very trivial to convert the sample to C#... in fact I just
>>>>>>>>>>>> did:
>>>>>>>>>>>> http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI/samples/CustomizedZoomWithWebLayout
>>>>>>>>>>>>
>>>>>>>>>>>> If you just want to understand what happens, there should be a
>>>>>>>>>>>> more 
>>>>>>>>>>>> verbose message in the error.log:
>>>>>>>>>>>> C:\Program Files\MapGuideOpenSource2.0\Server\logs\error.log
>>>>>>>>>>>>
>>>>>>>>>>>> Also, are you certain that the pst_map is a valid map
>>>>>>>>>>>> identifier,
>>>>>>>>>>>> and 
>>>>>>>>>>>> that str_NewMapDefinition is a valid resource identifier?
>>>>>>>>>>>>
>>>>>>>>>>>> I'm guessing that pst_map is a string like: 
>>>>>>>>>>>> "Library://map.MapDefinition", so your str_NewMapDefinition
>>>>>>>>>>>> becomes:
>>>>>>>>>>>> Session:<sessionid>//Library://map.MapDefinition.MapDefinition
>>>>>>>>>>>>
>>>>>>>>>>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> euskalmap skrev:
>>>>>>>>>>>>     
>>>>>>>>>>>>         
>>>>>>>>>>>>             
>>>>>>>>>>>>                 
>>>>>>>>>>>>                     
>>>>>>>>>>>>                         
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>> It do not run with the parameter false in the instruction
>>>>>>>>>>>>> UTF8Encoding
>>>>>>>>>>>>> utf8
>>>>>>>>>>>>> = new UTF8Encoding(false);
>>>>>>>>>>>>> In your link sample(
>>>>>>>>>>>>> http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI/samples/CustomizedZoomWithWebLayout
>>>>>>>>>>>>> http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI/samples/CustomizedZoomWithWebLayout
>>>>>>>>>>>>> ), it is a vb code with the mapguide maetro api; i will not
>>>>>>>>>>>>> change
>>>>>>>>>>>>> all
>>>>>>>>>>>>> my
>>>>>>>>>>>>> code because i use c# with mapguide api; i want to undestand
>>>>>>>>>>>>> why
>>>>>>>>>>>>> it
>>>>>>>>>>>>> do
>>>>>>>>>>>>> not
>>>>>>>>>>>>> run; i use the same method to change the filter in layers and
>>>>>>>>>>>>> it
>>>>>>>>>>>>> run
>>>>>>>>>>>>> very
>>>>>>>>>>>>> well ! what's append in my code?
>>>>>>>>>>>>>
>>>>>>>>>>>>> thanks
>>>>>>>>>>>>>
>>>>>>>>>>>>> Kenneth Skovhede, GEOGRAF A/S wrote:
>>>>>>>>>>>>>   
>>>>>>>>>>>>>       
>>>>>>>>>>>>>           
>>>>>>>>>>>>>               
>>>>>>>>>>>>>                   
>>>>>>>>>>>>>                       
>>>>>>>>>>>>>                           
>>>>>>>>>>>>>> You need to create the UTF8Encoding object with the parameter
>>>>>>>>>>>>>> "false" 
>>>>>>>>>>>>>> (meaning disable BOM).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> A slightly easier way to do this:
>>>>>>>>>>>>>> http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI/samples/CustomizedZoomWithWebLayout
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> euskalmap skrev:
>>>>>>>>>>>>>>     
>>>>>>>>>>>>>>         
>>>>>>>>>>>>>>             
>>>>>>>>>>>>>>                 
>>>>>>>>>>>>>>                     
>>>>>>>>>>>>>>                         
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>>> Hi
>>>>>>>>>>>>>>> I provide the end user with a link to my special page (see
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> code1).
>>>>>>>>>>>>>>> In
>>>>>>>>>>>>>>> that page i redirect to the MapGuide viewer files
>>>>>>>>>>>>>>> (Response.Redirect).
>>>>>>>>>>>>>>> code1:
>>>>>>>>>>>>>>> http://n2.nabble.com/file/n2462320/sample1.jpg 
>>>>>>>>>>>>>>> The fonction SetLayout Map modify the mapdefinition in my
>>>>>>>>>>>>>>> layout.
>>>>>>>>>>>>>>> See
>>>>>>>>>>>>>>> image
>>>>>>>>>>>>>>> here :
>>>>>>>>>>>>>>> http://n2.nabble.com/file/n2462320/sample2.jpg 
>>>>>>>>>>>>>>> The problem : the layout is not modify and i have this
>>>>>>>>>>>>>>> message
>>>>>>>>>>>>>>> :
>>>>>>>>>>>>>>> An
>>>>>>>>>>>>>>> exception occurred in the XML parser.
>>>>>>>>>>>>>>> Have you an idea ?
>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>   
>>>>>>>>>>>>>>>       
>>>>>>>>>>>>>>>           
>>>>>>>>>>>>>>>               
>>>>>>>>>>>>>>>                   
>>>>>>>>>>>>>>>                       
>>>>>>>>>>>>>>>                           
>>>>>>>>>>>>>>>                               
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> mapguide-users mailing list
>>>>>>>>>>>>>> mapguide-users at lists.osgeo.org
>>>>>>>>>>>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>     
>>>>>>>>>>>>>>         
>>>>>>>>>>>>>>             
>>>>>>>>>>>>>>                 
>>>>>>>>>>>>>>                     
>>>>>>>>>>>>>>                         
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>   
>>>>>>>>>>>>>       
>>>>>>>>>>>>>           
>>>>>>>>>>>>>               
>>>>>>>>>>>>>                   
>>>>>>>>>>>>>                       
>>>>>>>>>>>>>                           
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> mapguide-users mailing list
>>>>>>>>>>>> mapguide-users at lists.osgeo.org
>>>>>>>>>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>     
>>>>>>>>>>>>         
>>>>>>>>>>>>             
>>>>>>>>>>>>                 
>>>>>>>>>>>>                     
>>>>>>>>>>>>                         
>>>>>>>>>>>   
>>>>>>>>>>>       
>>>>>>>>>>>           
>>>>>>>>>>>               
>>>>>>>>>>>                   
>>>>>>>>>>>                       
>>>>>>>>>> _______________________________________________
>>>>>>>>>> mapguide-users mailing list
>>>>>>>>>> mapguide-users at lists.osgeo.org
>>>>>>>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>     
>>>>>>>>>>         
>>>>>>>>>>             
>>>>>>>>>>                 
>>>>>>>>>>                     
>>>>>>>>>   
>>>>>>>>>       
>>>>>>>>>           
>>>>>>>>>               
>>>>>>>>>                   
>>>>>>>> _______________________________________________
>>>>>>>> mapguide-users mailing list
>>>>>>>> mapguide-users at lists.osgeo.org
>>>>>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>>>>>
>>>>>>>>
>>>>>>>>     
>>>>>>>>         
>>>>>>>>             
>>>>>>>>                 
>>>>>>>   
>>>>>>>       
>>>>>>>           
>>>>>>>               
>>>>>> _______________________________________________
>>>>>> mapguide-users mailing list
>>>>>> mapguide-users at lists.osgeo.org
>>>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>>>
>>>>>>
>>>>>>     
>>>>>>         
>>>>>>             
>>>>>   
>>>>>       
>>>>>           
>>>> _______________________________________________
>>>> mapguide-users mailing list
>>>> mapguide-users at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>
>>>>
>>>>     
>>>>         
>>>   
>>>       
>> _______________________________________________
>> mapguide-users mailing list
>> mapguide-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>
>>
>>     
>
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapguide-users/attachments/20090319/54514faf/attachment.html


More information about the mapguide-users mailing list