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
Post a Comment