2010-06-09 5 views
5

je besoin donc générer XML comme suit:Ajouter namespaces avec et sans nom à 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> 

Je ne peux pas l'air de comprendre comment ajouter l'espace de noms sans nom, sans mettre « xmlns = « » » dans tous les tags d'URL.

mon code:

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)    
    )); 

Toutes les idées? Merci

Répondre

11

Vous devez déclarer l'espace de noms "vide" en tant qu'espace de noms par défaut. Par exemple, cela fonctionne très 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

Comment passez-vous en boucle? – Mithil

+0

Désolé - Je ne comprends pas ce que vous voulez dire ... –

+0

votre exemple ajoute un seul ...... Comment puis-je ajouter plusieurs? – Mithil