Das Problem ist, dass die Elemente <Entry>
tatsächlich im Standard-Namespace des Root-Knotens sind, die "http://www.fieldgulls.com/rss/current"
ist:
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> <!--The default namespace for nested elements is set here with the xmlns= attribute -->
<title>Field Gulls - All Posts</title>
<subtitle>The stupidest name in smart football analysis.</subtitle>
<icon>https://cdn3.vox-cdn.com/community_logos/50215/fieldgulls-fav.png</icon>
<updated>2016-11-13T17:00:02-08:00</updated>
<id>http://www.fieldgulls.com/rss/current/</id>
<link type="text/html" href="http://www.fieldgulls.com/" rel="alternate"/>
<entry>
<!--Remainder commented out-->
So müssen Sie Knoten wählen Sie den entsprechenden Namespace und die entsprechende SelectNodes()
Überschreibung mit:
var reader = new XmlDocument();
reader.Load(@"http://www.fieldgulls.com/rss/current");
var nsmgr = new XmlNamespaceManager(reader.NameTable);
nsmgr.AddNamespace("a", "http://www.w3.org/2005/Atom");
XmlNodeList list = reader.SelectNodes(".//a:entry", nsmgr);
In Fällen wie diesen, finde ich es hilfreich, den folgenden Debug-Dienstprogramm auf der neueren LINQ to XML Klassenbibliothek basierte zu verwenden, den Namensraum von jedem Knoten zu machen appare zt:
public static class XObjectExtensions
{
public static IEnumerable<string> DumpXmlElementNames(this XDocument doc)
{
return doc.Root.DumpXmlElementNames();
}
public static IEnumerable<string> DumpXmlElementNames(this XElement root)
{
if (root == null)
return Enumerable.Empty<string>();
var startCount = root.AncestorsAndSelf().Count();
return root.DescendantsAndSelf().Select(el => string.Format("{0}\"{1}\"",
new string(' ', 2 * (el.AncestorsAndSelf().Count() - startCount)), el.Name.ToString()));
}
}
Dann, wenn das Debuggen, würden Sie tun:
Console.WriteLine("Dumping a list of all element names and namespaces: ");
Console.WriteLine(String.Join("\n", XDocument.Load(@"http://www.fieldgulls.com/rss/current").DumpXmlElementNames()));
, die einen Ausgang erzeugt, der mit Beginn des Einsatzes:
"{http://www.w3.org/2005/Atom}feed"
"{http://www.w3.org/2005/Atom}title"
"{http://www.w3.org/2005/Atom}subtitle"
"{http://www.w3.org/2005/Atom}icon"
"{http://www.w3.org/2005/Atom}updated"
"{http://www.w3.org/2005/Atom}id"
"{http://www.w3.org/2005/Atom}link"
"{http://www.w3.org/2005/Atom}entry"
Probe fiddle.
Sie XML-Knoten sind wahrscheinlich in einem Namespace, aber ohne [mcve] können wir nicht sicher sein. Können Sie Ihre Frage bearbeiten, um das XML zu integrieren? Oder lesen Sie [Verwenden von Xpath mit Standard-Namespace in C#] (https://stackoverflow.com/questions/585812/using-xpath-with-default-namespace-in-c-sharp/2911160#2911160) für eine allgemeine Antwort auf how um Knoten mit Namespaces auszuwählen. – dbc
Oh - '" http://www.fieldgulls.com/rss/current "' ist die tatsächliche Live-URL. In diesem Fall ist der korrekte Namespace für die Knoten "" 'xmlns =" http://www.w3.org/2005/Atom "' –
dbc