Bereich von Standardnamespaces in C#Scope of Default Namespaces in C#

Standardnamespaces, wie sie in der XML-Struktur dargestellt werden, befinden sich bei Abfragen nicht innerhalb des gültigen Bereichs.Default namespaces as represented in the XML tree are not in scope for queries. Bei XML, das sich in einem Standardnamespace befindet, müssen Sie weiterhin eine XNamespace-Variable deklarieren und diese Variable mit dem lokalen Namen kombinieren, um einen qualifizierten Namen zu erhalten, der in der Abfrage verwendet werden kann.If you have XML that is in a default namespace, you still must declare an XNamespace variable, and combine it with the local name to make a qualified name to be used in the query.

Eines der häufigsten Probleme beim Abfragen von XML-Strukturen besteht darin, dass der Entwickler, wenn die XML-Struktur einen Standardnamespace besitzt, mitunter die Abfrage so schreibt, als würde sich das XML nicht in einem Namespace befinden.One of the most common problems when querying XML trees is that if the XML tree has a default namespace, the developer sometimes writes the query as though the XML were not in a namespace.

Der erste Satz von Beispielen in diesem Thema zeigt eine typische Vorgehensweise, bei der XML in einem Standardnamespace geladen, dann jedoch nicht ordnungsgemäß abgefragt wird.The first set of examples in this topic shows a typical way that XML in a default namespace is loaded, but is queried improperly.

Der zweite Satz von Beispielen zeigt die notwendigen Korrekturen, die durchgeführt werden müssen, damit XML in einem Namespace abgefragt werden kann.The second set of examples show the necessary corrections so that you can query XML in a namespace.

BeispielExample

Dieses Beispiel zeigt die Erstellung von XML in einem Namespace und eine Abfrage, die ein leeres Resultset zurückgibt.This example shows the creation of XML in a namespace, and a query that returns an empty result set.

CodeCode

XElement root = XElement.Parse(  
@"<Root xmlns='http://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("Child")  
    select el;  
Console.WriteLine("Result set follows:");  
foreach (XElement el in c1)  
    Console.WriteLine((int)el);  
Console.WriteLine("End of result set");  

KommentareComments

Dieses Beispiel liefert das folgende Ergebnis:This example produces the following result:

Result set follows:  
End of result set  

BeispielExample

Dieses Beispiel zeigt die Erstellung von XML in einem Namespace und eine Abfrage, die korrekt codiert ist.This example shows the creation of XML in a namespace, and a query that is coded properly.

Im Gegensatz zum falsch codierten Beispiel oben besteht der richtige Ansatz bei Verwendung von C# darin, ein XNamespace-Objekt zu deklarieren und zu initialisieren und dieses beim Angeben von XName-Objekten zu verwenden.In contrast to the incorrectly coded example above, the correct approach when using C# is to declare and initialize an XNamespace object, and to use it when specifying XName objects. In diesem Fall ist das Argument der Elements-Methode ein XName-Objekt.In this case, the argument to the Elements method is an XName object.

CodeCode

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

KommentareComments

Dieses Beispiel liefert das folgende Ergebnis:This example produces the following result:

Result set follows:  
1  
2  
3  
End of result set  

Siehe auchSee Also

Working with XML Namespaces (C#) (Arbeiten mit XML-Namespaces (C#))Working with XML Namespaces (C#)