2009-05-22 4 views
1

Say I XElement.Parse() mit dem folgenden XML-String nennen:Kann ich vermeiden, in LINQ to XML vollständig qualifizierte Elementnamen verwenden zu müssen?

var xml = XElement.Parse(@" 
    <?xml version="1.0" encoding="UTF-8"?> 
    <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <Owner> 
     <ID>7c75442509c41100b6a413b88b523bd6f46554cdbee5b6cbe27bc08cb3f6a865</ID> 
     <DisplayName>me</DisplayName> 
    </Owner> 
    <AccessControlList> 
     <Grant> 
     <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> 
     ... 
    "); 

Wenn es Zeit wird, das Element abfragen, ich bin da ein xmlns vollqualifizierten Elementnamen zu verwenden, gezwungen, dass XML-Dokument enthält Attribut in seiner Wurzel. Dies erfordert umständliche Kreationen von XName Instanzen:

var AWS_XMLNS = "http://s3.amazonaws.com/doc/2006-03-01/"; 
var ownerElement = xml.Element(XName.Get("AccessControlPolicy", AWS_XMLNS)).Element(XName.Get("Owner", AWS_XMLNS)); 

Wenn das, was ich wirklich will, ist einfach,

var ownerElement = xml.Element("AccessControlPolicy").Element("Owner"); 

Gibt es eine Möglichkeit LINQ annehmen einen bestimmten Namespace in XML zu machen, damit ich nicht muss es weiter spezifizieren?

Antwort

1

mit vereinfachen glaube ich nicht, dass Sie (Jon Skeet comment sehen), aber es gibt ein paar Tricks, die Sie tun können.

1) schaffen eine Erweiterungsmethode, die die XNamespace auf Ihre Zeichenfolge anhängt

2) Verwenden Sie VB?!?

3

Sie könnten von

XNamespace ns = "http://s3.amazonaws.com/doc/2006-03-01/"; 
var ownerElement = xml.Element(ns + "AccessControlPolicy").Element(ns + "Owner");