2010-06-09 10 views
5

que necesito Así genero XML como el siguiente:Agregar espacios de nombres con y sin nombres a un XElement

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <url> 
     <loc>http://www.xyz.eu/</loc> 
     <lastmod>2010-01-20T10:56:47Z</lastmod> 
     <changefreq>daily</changefreq> 
     <priority>1</priority> 
    </url> 
    <url> 
     <loc>http://www.xyz.eu/2/</loc> 
     <lastmod>2009-10-13T10:20:03Z</lastmod> 
     <changefreq>daily</changefreq> 
     <priority>0.5</priority> 
    </url> 
    <url> 
     <loc>http://www.xyz.eu/3/</loc> 
     <lastmod>2009-10-13T10:19:09Z</lastmod> 
     <changefreq>daily</changefreq> 
     <priority>0.5</priority> 
    </url> 
</urlset> 

Parece que no puedo encontrar la manera de añadir el espacio de nombres sin nombre, sin poner 'xmlns = ''' en todas las etiquetas de URL

mi código:

XNamespace blank = XNamespace.Get(@"http://www.sitemaps.org/schemas/sitemap/0.9"); 
XNamespace xsi = XNamespace.Get(@"http://www.w3.org/2001/XMLSchema-instance"); 

XDocument doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"), 
    new XElement(blank + "urlset", 
     //new XAttribute(XNamespace.Xmlns +"", blank), 
     new XAttribute(XNamespace.Xmlns + "xsi", xsi), 
     // This private method loops through the dictionary and creates all the page nodes 

     GetSiteMapChildren(pageIdVersionDic, site.Url)    
    )); 

¿Alguna idea? Gracias

Respuesta

11

Debe declarar el espacio de nombres "en blanco" como el espacio de nombres predeterminado. Por ejemplo, esto funciona bien:

 XNamespace blank = XNamespace.Get(@"http://www.sitemaps.org/schemas/sitemap/0.9"); 
     XNamespace xsi = XNamespace.Get(@"http://www.w3.org/2001/XMLSchema-instance"); 

     XDocument doc = new XDocument(
      new XDeclaration("1.0", "utf-8", "yes"), 
      new XElement(blank + "urlset", 
       new XAttribute("xmlns", blank.NamespaceName), 
       new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), 

       new XElement(blank + "url", 
        new XElement(blank + "loc", "http://www.xyz.eu/"), 
        new XElement(blank + "lastmod", "2010-01-20T10:56:47Z"), 
        new XElement(blank + "changefreq", "daily"), 
        new XElement(blank + "priority", "1")) 
      )); 

     Console.WriteLine(doc.ToString()); 
+0

¿Cómo funciona? – Mithil

+0

Lo siento, no entiendo lo que quiere decir ... –

+0

su ejemplo agrega solo un ...... ¿Cómo agrego múltiples? – Mithil

Cuestiones relacionadas