/ / XML XDocument - कोई तत्व नहीं प्रतीत होता है - c #, xml

XML XDocument - कोई तत्व नहीं प्रतीत होता है - c #, xml

मैं XDocument को समझने की कोशिश कर रहा हूं और यह विभिन्न तरीके हैं।

मेरे पास एक साइट का नक्शा है, और मैं URL पढ़ने की कोशिश कर रहा हूं

<urlset xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://www.site.co.uk/</loc>
</url>
<url>
<loc>http://www.site.co.uk/page</loc>
</url>
</urlset>

उपरोक्त पार्स ठीक है और मैं लोक (पेज URL) के मूल्यों को पढ़ने की कोशिश कर रहा हूं लेकिन यह गलत है

        string siteMapText = String.Empty();
GetValueOfPageFromWebClient(SiteMapUrl, out siteMapText);

XDocument siteMap =
XDocument.Parse(siteMapText);

foreach (var loc in siteMap.Descendants())
{
//logic
}

मेरे C # में

loc.Element("loc").Value //should show value but doesn"t

मैं इस पर पुनरावृति कैसे करूं? loc मान?

संपादित करें

जॉन स्कीट के जवाब के अनुसार, मैंने कोशिश की

यदि मैं करता हूँ

  foreach (var loc in siteMap.Descendants("loc"))
{
//never enters
}

यही सच है

  foreach (var loc in siteMap.Descendants("url"))
{
//never enters
}

मुझे करना था foreach (साइट मैप में var लोकेशन। डिसेंडेंडेंट्स ()) { अगर (loc.Name.LocalName! = "url") जारी रखें; // कोड }

क्या कोई समझा सकता है कि ऐसा क्यों है?

उत्तर:

जवाब के लिए 2 № 1

मैं स्थानीय मूल्यों पर कैसे पुनरावृति करूं?

सबसे सरल तरीका है ओवरलोड का उपयोग करना Descendants जो स्वीकार करता है XName:

foreach (var loc in siteMap.Descendants("loc"))
{
string value = loc.Value;
...
}

वर्तमान में, आप "के लिए पूछ रहे हैं loc प्रत्येक तत्व के भीतर तत्व - लेकिन न तो मूल तत्व और न ही loc तत्वों में शामिल हैं loc बच्चे के तत्व, इसलिए Element रिटर्न null, एक अपवाद के लिए अग्रणी।

अब ऐसा लगता है कि XML isn "t वास्तव में जैसा कि आपने "इसे प्रश्न में दिखाया है। इसके बजाय, इसमें एक डिफ़ॉल्ट नाम स्थान है:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" ...>

तो सभी वंश तत्व उस नाम स्थान में भी हैं, क्योंकि वे "कुछ और निर्दिष्ट नहीं करते हैं ... इसलिए जब आप चीजों की तलाश कर रहे हैं तो आपको नाम स्थान निर्दिष्ट करने की आवश्यकता है।" सौभाग्य से, यह आसान है:

XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";
foreach (var loc in siteMap.Descendants(ns + "loc"))
{
...
}