2010-07-27 17 views
6

Ben sitemaps.org Buna göre dinamik siteharitasi.xmlXML'de LINQ ile dinamik bir siteemap.xml oluştururken xsi: schemalocation özniteliği doğru olarak nasıl oluşturulur?

elde ediyorum yüzden sitemap.xml

oluşturmak için XML için LINQ kullanıyorum bir sitemap.xml

<?xml version='1.0' encoding='UTF-8'?> 
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" 
    xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    <url> 
    ... 
    </url> 
</urlset> 

için başlık budur

XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9"; 
return new XElement(ns + "urlset", 
    new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"), 
    new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"), 
    //new XAttribute("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"), 
    from node in new GetNodes() 
    select new XElement(ns + "url", 
     new XElement(ns + "loc", node.Loc), 
     new XElement(ns + "lastmod", node.LastMod), 
     new XElement(ns + "priority", node.Priority) 
    ) 
).ToString(); 

Yorumlanan satır doğru yapılamamıştır.
"xsi: schemalocation" özniteliğini nasıl ayarlayabilirim?

Teşekkürler.

cevap

4

Tamam, doğru anladım. Teşekkür Mike Caron
Ben o zaman

XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9"; 
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; 
return new XElement(ns + "urlset", 
    new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"), 
    new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"), 
    new XAttribute(xsi + "schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"), 
    from node in GetNodes() 
    select new XElement(ns + "url", 
     new XElement(ns + "loc", node.Loc), 
     new XElement(ns + "lastmod", node.LastMod), 
     new XElement(ns + "priority", node.Priority) 
    ) 
).ToString(); 
+0

Adil olmak gerekirse, gerçek isim-alanı tanımlayıcısının ne olduğu önemli değil. Her şey için "carlosmunoz" olabilir :) –

+0

Cool, daha sonra "carlosmunoz" kullanacağım –

+0

Hey Carlos, 'GetNodes' yöntemi ne işe yarar? Şimdiden teşekkürler. – Ethan

3

Ben LINQ XML biliyorum ama belgelerine de sonra hızlı bir göz, bu kalkmayın: Ben xmlns ayarı değilim

XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9"; 
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; 
return new XElement(ns + "urlset", 
    new XAttribute(xsi + "schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"), 
    from node in new GetNodes() 
    select new XElement(ns + "url", 
     new XElement(ns + "loc", node.Loc), 
     new XElement(ns + "lastmod", node.LastMod), 
     new XElement(ns + "priority", node.Priority) 
    ) 
).ToString(); 

Not açıkça bağlıyor. Otomatik olarak oluşturulduklarından şüpheleniyorum. Ayrıca, bu test edilmediğinden, uyarı imparatorluğu.

+0

neredeyse işleri Bu işler ancak üretir XAtrribute (XNamespace.Xmlns + "xsi", ...) bildirirseniz: p1 yerine: xsi dizesi beri "xsi "hiçbir yerde ayarlanmamış. –