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.

È stato utile?

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à.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top