How to generate xml and format it from object in c#? -


here trying format xml list , not getting proper format. here code:

protected void generatexml(string url, list<string> listitems)  //generatexml {     xnamespace nsxhtml = "http://www.w3.org/1999/xhtml";     xnamespace nssitemap = "http://www.sitemaps.org/schemas/sitemap/0.9";     xnamespace nsimage = "http://www.google.com/schemas/sitemap-image/1.1";     var sitemap = new xdocument(new xdeclaration("1.0", "utf-8", ""));      var urlset =         new xelement(             nssitemap + "urlset",             new xattribute("xmlns", nssitemap),             new xattribute(xnamespace.xmlns + "image", nsxhtml),             urlnode in listitems             select                  new xelement(                     nssitemap + "url",                     new xelement(nssitemap + "loc", url),                     new xelement(nssitemap + "image",                     new xelement(nssitemap + "imageloc", urlnode))));      sitemap.add(urlset);     sitemap.save(system.web.httpcontext.current.server.mappath("/static/sitemaps/sitemap-image.xml")); } 

... , getting format this:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.w3.org/1999/xhtml">   <url>     <loc>http://example.com/intl/cars/new-models/the-new-s90</loc>     <image>        <imageloc>http://example.com/static/images/volvo-logo-scaled.png</imageloc>     </image>   </url>   <url>     <loc>http://example.com/intl/cars/new-models/the-new-s90</loc>     <image>       <imageloc>http://assets.example.com/intl/~/media/images/galleries/new-cars/packshots/small/allnew_xc90-side_2.png</imageloc>     </image>   </url> </urlset> 

but need in format:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"         xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">   <url>     <loc>http://example.com/sample.html</loc>     <image:image>       <image:loc>http://example.com/image.jpg</image:loc>     </image:image>     <image:image>       <image:loc>http://example.com/photo.jpg</image:loc>     </image:image>   </url>  </urlset>  

any suggestion?

in addition handling multiple nested elements, never assigned image prefix elements supposed have them, continue use global namespace:

new xelement(nssitemap + "image",    new xelement(nssitemap + "imageloc", urlnode) 

nssitemap should nsimage, , "imageloc" should "loc".

a couple minor tweaks code you're looking for:

protected void generatexml(string url, list<string> listitems)  //generatexml {      xnamespace nssitemap = "http://www.sitemaps.org/schemas/sitemap/0.9";     xnamespace nsimage = "http://www.google.com/schemas/sitemap-image/1.1";      var sitemap = new xdocument(new xdeclaration("1.0", "utf-8", ""));      var urlset = new xelement(nssitemap + "urlset",         new xattribute("xmlns", nssitemap),         new xattribute(xnamespace.xmlns + "image", nsimage),         new xelement(nssitemap + "url",         new xelement(nssitemap + "loc", url),         urlnode in listitems         select new xelement(nsimage + "image",                new xelement(nsimage + "loc", urlnode)            )));         sitemap.add(urlset);          sitemap.save(system.web.httpcontext.current.server.mappath("/static/sitemaps/sitemap-image.xml")); } 

notice following changes:

new xattribute(xnamespace.xmlns + "image", nsimage); 

this sets namespace correctly mach expected output.

new xelement(nsimage + "image", new xelement(nsimage + "loc", urlnode) 

this sets image prefix correctly.

notice how "loc" , "url" moved before from query.

the above code results in following output xml:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">   <url>     <loc>http://example.com/sample.html</loc>     <image:image>       <image:loc>http://example.com/image.jpg</image:loc>     </image:image>     <image:image>       <image:loc>http://example.com/photo.jpg</image:loc>     </image:image>   </url> </urlset> 

Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -