Condividi tramite


Procedura: scrivere query su XML negli spazi dei nomi

Per scrivere una query su XML inclusa in uno spazio dei nomi, è necessario utilizzare oggetti XName con lo spazio dei nomi corretto.

Per C#, l'approccio più comune consiste nell'inizializzare un oggetto XNamespace utilizzando una stringa contenente l'URI, quindi utilizzare l'overload dell'operatore di addizione per combinare lo spazio dei nomi con il nome locale.

In Visual Basic, l'approccio più comune consiste nel definire uno spazio dei nomi globale, quindi utilizzare valori letterali e proprietà XML che utilizzano lo spazio dei nomi globale. È possibile definire uno spazio dei nomi globale predefinito, nel qual caso gli elementi dei valori letterali XML saranno inclusi nello spazio dei nomi per impostazione predefinita. In alternativa, è possibile definire uno spazio dei nomi globale con un prefisso e quindi utilizzare il prefisso come richiesto nei valori letterali e nelle proprietà XML. Come con altri tipi di XML, gli attributi non sono mai inclusi in alcuno spazio dei nomi per impostazione predefinita.

Nel primo set di esempi in questo argomento è illustrato come creare una struttura ad albero XML in uno spazio dei nomi predefinito sia in C# che in Visual Basic. Nel secondo set viene illustrato come creare una struttura ad albero XML in uno spazio dei nomi con un prefisso in entrambi i linguaggi.

Esempio

Nell'esempio seguente viene creata una struttura ad albero XML inclusa in uno spazio dei nomi predefinito. Viene quindi recuperata una raccolta di elementi.

XNamespace aw = "https://www.adventure-works.com";
XElement root = XElement.Parse(
@"<Root xmlns='https://www.adventure-works.com'>
    <Child>1</Child>
    <Child>2</Child>
    <Child>3</Child>
    <AnotherChild>4</AnotherChild>
    <AnotherChild>5</AnotherChild>
    <AnotherChild>6</AnotherChild>
</Root>");
IEnumerable<XElement> c1 =
    from el in root.Elements(aw + "Child")
    select el;
foreach (XElement el in c1)
    Console.WriteLine((int)el);
Imports <xmlns="https://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim root As XElement = _
            <Root>
                <Child>1</Child>
                <Child>2</Child>
                <Child>3</Child>
                <AnotherChild>4</AnotherChild>
                <AnotherChild>5</AnotherChild>
                <AnotherChild>6</AnotherChild>
            </Root>
        Dim c1 As IEnumerable(Of XElement) = _
            From el In root.<Child> _
            Select el
        For Each el As XElement In c1
            Console.WriteLine(el.Value)
        Next
    End Sub
End Module

L'output ottenuto eseguendo l'esempio è il seguente:

1
2
3

In C# le query vengono scritte in modo identico a prescindere che vengano scritte in una struttura ad albero XML che utilizza uno spazio dei nomi con un prefisso o in una struttura ad albero XML con uno spazio dei nomi predefinito.

In Visual Basic, tuttavia, la scrittura di query in una struttura ad albero XML che utilizza uno spazio dei nomi con un prefisso, è piuttosto diversa dall'esecuzione di query in una struttura ad albero XML con uno spazio dei nomi predefinito. Lo spazio dei nomi con un prefisso viene in genere importato utilizzando l'istruzione Imports. Il prefisso viene quindi utilizzato nei nomi di elementi e attributi quando si crea la struttura ad albero XML. Il prefisso viene inoltre utilizzato durante l'esecuzione di query su una struttura ad albero XML tramite proprietà XML.

Nell'esempio seguente viene creata una struttura ad albero XML inclusa in uno spazio dei nomi con un prefisso. Viene quindi recuperata una raccolta di elementi.

XNamespace aw = "https://www.adventure-works.com";
XElement root = XElement.Parse(
@"<aw:Root xmlns:aw='https://www.adventure-works.com'>
    <aw:Child>1</aw:Child>
    <aw:Child>2</aw:Child>
    <aw:Child>3</aw:Child>
    <aw:AnotherChild>4</aw:AnotherChild>
    <aw:AnotherChild>5</aw:AnotherChild>
    <aw:AnotherChild>6</aw:AnotherChild>
</aw:Root>");
IEnumerable<XElement> c1 =
    from el in root.Elements(aw + "Child")
    select el;
foreach (XElement el in c1)
    Console.WriteLine((int)el);
Imports <xmlns:aw="https://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim root As XElement = _
            <aw:Root>
                <aw:Child>1</aw:Child>
                <aw:Child>2</aw:Child>
                <aw:Child>3</aw:Child>
                <aw:AnotherChild>4</aw:AnotherChild>
                <aw:AnotherChild>5</aw:AnotherChild>
                <aw:AnotherChild>6</aw:AnotherChild>
            </aw:Root>
        Dim c1 As IEnumerable(Of XElement) = _
            From el In root.<aw:Child> _
            Select el
        For Each el As XElement In c1
            Console.WriteLine(CInt(el))
        Next
    End Sub
End Module

L'output ottenuto eseguendo l'esempio è il seguente:

1
2
3

Vedere anche

Altre risorse

Utilizzo degli spazi dei nomi XML