Share via


Gewusst wie: Schreiben von Abfragen für XML in Namespaces

Aktualisiert: November 2007

Wenn Sie eine Abfrage für XML in einem Namespace schreiben möchten, müssen Sie XName-Objekte verwenden, die den richtigen Namespace enthalten.

In C# besteht der am häufigsten verwendete Ansatz darin, einen XNamespace mit einer Zeichenfolge zu initialisieren, die den URI enthält, und dann mithilfe der Additionsoperatorüberladung den Namespace mit dem lokalen Namen zu kombinieren.

In Visual Basic wird meist ein globaler Namespace definiert, und anschließend werden XML-Literale und XML-Eigenschaften verwendet, die den globalen Namespace verwenden. Sie können einen globalen Standardnamespace definieren. Die Elemente in den XML-Literalen sind dann standardmäßig im Namespace vorhanden. Stattdessen können Sie auch einen globalen Namespace mit einem Präfix definieren und dann das Präfix den Anforderungen entsprechend in den XML-Literalen und in den XML-Eigenschaften verwenden. Wie bei anderen XML-Formen auch befinden sich Attribute standardmäßig nicht in einem Namespace.

Im ersten Satz von Beispielen in diesem Thema wird die Erstellung einer XML-Struktur in einem Standardnamespace sowohl in C# als auch in Visual Basic dargestellt. Im zweiten Satz wird die Erstellung einer XML-Struktur in einem Namespace mit einem Präfix ebenfalls in beiden Sprachen dargestellt.

Beispiel

Das folgende Beispiel erstellt eine XML-Struktur, die sich in einem Standardnamespace befindet. Anschließend ruft das Beispiel eine Auflistung der Elemente ab.

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

Dieses Beispiel führt zur folgenden Ausgabe:

1
2
3

In C# werden Abfragen unabhängig davon geschrieben, ob sie für eine XML-Struktur, die einen Namespace mit einem Präfix verwendet, oder für eine XML-Struktur mit einem Standardnamespace vorgesehen sind.

In Visual Basic jedoch unterscheiden sich Abfragen für eine XML-Struktur, die einen Namespace mit einem Präfix verwendet, von denen für eine XML-Struktur in einem Standardnamespace. In der Regel wird die Imports-Anweisung zum Importieren des Namespaces mit einem Präfix verwendet. Danach wird das Präfix bei der Erstellung der XML-Struktur in den Element- und Attributnamen verwendet. Das Präfix wird auch zum Abfragen einer XML-Struktur mit XML-Eigenschaften verwendet.

Das folgende Beispiel erstellt eine XML-Struktur, die sich in einem Namespace mit einem Präfix befindet. Anschließend ruft das Beispiel eine Auflistung der Elemente ab.

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

Dieses Beispiel führt zur folgenden Ausgabe:

1
2
3

Siehe auch

Weitere Ressourcen

Arbeiten mit XML-Namespaces