Come posso ottenere un elenco di elementi figlio da Xdocument Object?
-
23-09-2019 - |
Domanda
Sto cercando di ottenere tutti gli elementi "video" e i loro attributi da un file XML che assomiglia a questo:
<?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>
Quanto segue selezionerà solo il nodo radice e tutti i bambini. Vorrei ottenere tutti gli elementi "video" nell'Ienumerable. Qualcuno può dirmi cosa sto facendo di sbagliato?
IEnumerable<XElement> elements = from xml in _xdoc.Descendants("videos")
select xml;
Quanto sopra restituisce una raccolta con una lunghezza == 1. Contiene l'elemento radicale e tutti i bambini.
Soluzione
Vuoi selezionare discendenti ("video"). I "video" sembrano essere la tua voce di root, di cui c'è 1 elemento. Gli elementi interiori dei video sono ciò che vuoi interrogare.
Esempio:
var query = from video in document.Descendants("video")
select new
{
Title = video.Attribute("title").Value,
Path = video.Attribute("path").Value
};
Questo ti dà un ignibovole di un tipo anonimo con due proprietà. Altrimenti, potresti semplicemente selezionare "video" e ottenere un IEnumerable<XElement>
, che vorresti ulteriormente analizzare secondo necessità.