Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Extensions.DescendantNodes<T>(IEnumerable<T>)

 

Data di pubblicazione: ottobre 2016

Restituisce una raccolta di nodi discendenti di ciascun documento ed elemento nella raccolta di origine.

Spazio dei nomi:   System.Xml.Linq
Assembly:  System.Xml.Linq (in System.Xml.Linq.dll)

public static IEnumerable<XNode> DescendantNodes<T>(
	this IEnumerable<T> source
)
where T : XContainer

Parametri

source
Type: System.Collections.Generic.IEnumerable<T>

Un IEnumerable<T> di XContainer che contiene la raccolta di origine.

Valore restituito

Type: System.Collections.Generic.IEnumerable<XNode>

Un IEnumerable<T> di XNode dei nodi discendente di ciascun documento ed elemento nella raccolta di origine.

Parametri tipo

T

Il tipo degli oggetti in source, vincolato a XContainer.

Questo metodo di estensione dell'asse viene utilizzato in XDocument e XElement oggetti. Entrambi questi tipi derivano da XContainer, pertanto questo metodo viene applicato un IEnumerable<T> di XContainer che contiene la raccolta di origine.

Sebbene Visual Basic ha un asse XML integrato per gli elementi discendenti, non esiste alcun asse integrato per i nodi discendenti, pertanto gli utenti di Visual Basic è necessario utilizzare questo metodo dell'asse in modo esplicito.

Questo metodo utilizza l'esecuzione posticipata.

Nell'esempio seguente viene recuperato un insieme di due elementi e quindi recupera una raccolta di tutti i nodi discendenti per ogni elemento nella raccolta di origine. Si noti che l'attributo del GrandChild elemento non viene esposto come un nodo.


                XElement xmlTree = XElement.Parse(
@"<Root>
    <Child>aaa<GrandChild anAttribute='xyz'>Text</GrandChild>
        <!--a comment-->
        <?xml-stylesheet type='text/xsl' href='test.xsl'?>
    </Child>
    <Child>ccc<GrandChild>Text</GrandChild>ddd</Child>
</Root>");
IEnumerable<XNode> nodes =
    from node in xmlTree.Elements("Child").DescendantNodes()
    select node;

foreach (XNode node in nodes)
{
    switch (node.NodeType)
    {
        case XmlNodeType.Element:
            Console.WriteLine("Element: {0}", ((XElement)node).Name);
            break;
        case XmlNodeType.Text:
            Console.WriteLine("Text: {0}", ((XText)node).Value);
            break;
        case XmlNodeType.Comment:
            Console.WriteLine("Comment: {0}", ((XComment)node).Value);
            break;
        case XmlNodeType.ProcessingInstruction:
            Console.WriteLine("PI: {0}", ((XProcessingInstruction)node).Data);
            break;
    }
}

Questo esempio produce il seguente output:

Text: aaa
Element: GrandChild
Text: Text
Comment: a comment
PI: type='text/xsl' href='test.xsl'
Text: ccc
Element: GrandChild
Text: Text
Text: ddd

L'esempio seguente è il medesimo, ma in questo caso il codice XML è in uno spazio dei nomi. Per altre informazioni, vedere Utilizzo degli spazi dei nomi XML.


                XNamespace aw = "http://www.adventure-works.com";
XElement xmlTree = XElement.Parse(
@"<Root xmlns='http://www.adventure-works.com'>
    <Child>aaa<GrandChild anAttribute='xyz'>Text</GrandChild>
        <!--a comment-->
        <?xml-stylesheet type='text/xsl' href='test.xsl'?>
    </Child>
    <Child>ccc<GrandChild>Text</GrandChild>ddd</Child>
</Root>");
IEnumerable<XNode> nodes =
    from node in xmlTree.Elements(aw + "Child").DescendantNodes()
    select node;

foreach (XNode node in nodes)
{
    switch (node.NodeType)
    {
        case XmlNodeType.Element:
            Console.WriteLine("Element: {0}", ((XElement)node).Name);
            break;
        case XmlNodeType.Text:
            Console.WriteLine("Text: {0}", ((XText)node).Value);
            break;
        case XmlNodeType.Comment:
            Console.WriteLine("Comment: {0}", ((XComment)node).Value);
            break;
        case XmlNodeType.ProcessingInstruction:
            Console.WriteLine("PI: {0}", ((XProcessingInstruction)node).Data);
            break;
    }
}

Questo esempio produce il seguente output:

Text: aaa
Element: {http://www.adventure-works.com}GrandChild
Text: Text
Comment: a comment
PI: type='text/xsl' href='test.xsl'
Text: ccc
Element: {http://www.adventure-works.com}GrandChild
Text: Text
Text: ddd

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 3.5
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: