2015-12-24 3 views
0

Я пытаюсь создать функцию для извлечения всех элементов местоположения из файла Sitemap.Получить все конкретные теги в XML-странице на странице (C#)

Эта веб-страница XML-документа Я пытаюсь читать

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://www.topquadcoptersreviews.com/wp-content/plugins/google-sitemap-generator/sitemap.xsl"?><!-- sitemap-generator-url="http://www.arnebrachhold.de" sitemap-generator-version="4.0.8" --> 
<!-- generated-on="December 24, 2015 6:26 am" --> 
<sitemapindex 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/siteindex.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-misc.xml</loc> 
     <lastmod>2015-12-09T03:05:04+00:00</lastmod> 
    </sitemap> 
    <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-pt-post-2015-12.xml</loc> 
     <lastmod>2015-12-09T03:05:04+00:00</lastmod> 
    </sitemap> 
    <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-pt-post-2015-11.xml</loc> 
     <lastmod>2015-11-28T09:52:03+00:00</lastmod> 
    </sitemap> 
    <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-pt-post-2015-10.xml</loc> 
     <lastmod>2015-10-23T11:39:16+00:00</lastmod> 
    </sitemap> 
    <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-pt-post-2015-09.xml</loc> 
     <lastmod>2015-09-26T11:24:49+00:00</lastmod> 
    </sitemap> 
    <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-pt-post-2015-08.xml</loc> 
     <lastmod>2015-08-31T12:03:10+00:00</lastmod> 
    </sitemap> 
    <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-pt-post-2015-07.xml</loc> 
     <lastmod>2015-08-25T11:56:33+00:00</lastmod> 
    </sitemap> 
    <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-pt-post-2015-05.xml</loc> 
     <lastmod>2015-12-05T06:59:11+00:00</lastmod> 
    </sitemap> 
    <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-pt-page-2015-10.xml</loc> 
     <lastmod>2015-10-31T11:06:37+00:00</lastmod> 
    </sitemap> 
    <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-pt-page-2015-09.xml</loc> 
     <lastmod>2015-09-24T12:01:22+00:00</lastmod> 
    </sitemap> 
    <sitemap> 
     <loc>http://www.topquadcoptersreviews.com/sitemap-pt-page-2015-05.xml</loc> 
     <lastmod>2015-11-16T04:25:02+00:00</lastmod> 
    </sitemap> 
</sitemapindex><!-- Request ID: 3a7e86d4b9d274d0b89130cb07553a8f; Queries for sitemap: 6; Total queries: 49; Seconds: 0.01; Memory for sitemap: 0.25MB; Total memory: 40.25MB --> 

Я пытаюсь получить все «LOC» элементы в списке и до сих пор я пытался получить доступ к элементам, но не работает, и на Я успешно создал XML-документ и смог получить к нему доступ.

Текущий код

string url = "http://www.topquadcoptersreviews.com/sitemap.xml"; 
        XmlDocument xmlDoc = new XmlDocument(); 
        xmlDoc.Load(url); 
+0

Просьба также добавить код пытается получить доступ к данным –

ответ

2

Хитрость заключается в использовании диспетчера пространства имен и префикса вашего выражения XPath с пространством имен по умолчанию:

string url = "http://www.topquadcoptersreviews.com/sitemap.xml"; 
var xmlDoc = new XmlDocument(); 
var xmlns = new XmlNamespaceManager(xmlDoc.NameTable); 
    xmlns.AddNamespace("default", "http://www.sitemaps.org/schemas/sitemap/0.9"); 
xmlDoc.Load(url); 

var locs = xmlDoc.SelectNodes("//default:loc", xmlns) 
    .OfType<XmlElement>() 
    .Select(element => element.InnerText) 
    .ToList(); 
+0

пространство имен является источником проблемы –

2

// Первый XML Load:

var data = XElement.Parse(xmlResult); 
string ns ="http://www.sitemaps.org/schemas/sitemap/0.9"; 
var m_content = data.Descendants(ns + "sitemapindex "); 
var loc = m_content.Select(p => p.Element(ns + "loc")); 

var locs =  m_content.Elements(ns + "loc"); 

// теперь должны иметь места в ВХ

// Может это поможет вам ..

1

Это будет делать это в LINQ к XML:

XDocument doc = XDocument.Load("data.xml"); 
XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9"; 

List<string> locs = doc.Descendants(ns + "loc").Select(e => e.Value).ToList(); 
Смежные вопросы