Frage

Ich versuche, einen XML-RSS-Feed von einer Website zu lesen. Deshalb verwende ich einen Asynchron-Download und eine XDocument mit der XDocument.Parse() Methode erstellen.

Das Dokument soll sehr einfach sein, wie folgt:

<root>
  <someAttribute></SomeAttribute>
  <item>...</item>
  <item>...</item>
</root>

Jetzt möchte ich alle Elemente auszulesen. Deshalb habe ich versucht:

foreach (XElement NewsEntry in xDocument.Descendants("item"))

, aber das funktioniert nicht. Also habe ich einen Beitrag in diesem Forum gefunden den qualifizierten Namen zu verwenden, da gibt es einige Namensräume im Stammelement definiert:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns="http://purl.org/rss/1.0/">

gut, habe ich versucht alle 3 verfügbaren Namespaces - nichts für mich gearbeitet:

XName itemName = XName.Get("item", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
XName itemName2 = XName.Get("item", "http://purl.org/dc/elements/1.1/");
XName itemName3 = XName.Get("item", "http://purl.org/rss/1.0/modules/syndication/");

Jede mögliche Hilfe würde geschätzt. (In der Regel mache ich die XML-Analyse mit Regex -. Aber dieses Mal habe ich für ein mobiles Gerät bin zu entwickeln, und müssen daher über die Leistung kümmern)

War es hilfreich?

Lösung

Sie haben nicht versucht, die Standard-Namespace bei der Ende der rdf Erklärung:

xmlns="http://purl.org/rss/1.0/"

Dies macht Sinn, da jedes Element in dem Standard-Namespace nicht den Namensraum benötigen, um zu dem Elementnamen vorangestellt.

Andere Tipps

Nicht direkt eine Lösung für die XDocument RSS lesen Problem. Aber warum nicht verwenden Sie die mitgelieferte SyncdicationFeed Klasse das Feed zu laden? http://msdn.microsoft.com/en-us /library/system.servicemodel.syndication.syndicationfeed.aspx

Versuchen Sie diese

var elements = from p in xDocument.Root.Elements()
where p.Name.LocalName == "item"
select p;

foreach(var element in elements)
{
//Do stuff
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top