Wie bekomme ich eine Liste von untergeordneten Elementen aus dem XDocument -Objekt?
-
23-09-2019 - |
Frage
Ich versuche alle "Video" -Anemente und ihre Attribute aus einer XML -Datei zu erhalten, die so aussieht:
<?xml version="1.0" encoding="utf-8" ?>
<videos>
<video title="video1" path="videos\video1.wma"/>
<video title="video2" path="videos\video2.wma"/>
<video title="video3" path="videos\video3.wma"/>
</videos>
Im Folgenden wird nur der Stammknoten und alle Kinder ausgewählt. Ich möchte alle 'Video' Elemente in das iEnumerable bringen. Kann mir jemand sagen, was ich falsch mache?
IEnumerable<XElement> elements = from xml in _xdoc.Descendants("videos")
select xml;
Das obige gibt eine Sammlung mit einer Länge zurück == 1. Es enthält das Wurzelelement und alle Kinder.
Lösung
Sie möchten Nachkommen auswählen ("Video"). "Videos" scheint Ihr Stammeintrag zu sein, von dem es 1 Element gibt. Die inneren Elemente von Videos sind das, was Sie abfragen möchten.
Beispiel:
var query = from video in document.Descendants("video")
select new
{
Title = video.Attribute("title").Value,
Path = video.Attribute("path").Value
};
Das gibt Ihnen einen iEnumerable eines anonymen Typs mit zwei String -Eigenschaften. Andernfalls können Sie einfach "Video" auswählen und eine erhalten IEnumerable<XElement>
, was Sie bei Bedarf weiter analysieren würden.