Posso evitar ter que usar nomes de elementos totalmente qualificado em LINQ para XML?

StackOverflow https://stackoverflow.com/questions/898394

  •  23-08-2019
  •  | 
  •  

Pergunta

Say I chamada XElement.Parse () com o seguinte seqüência de caracteres XML:

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">
      ...
  ");

Quando se trata tempo para consultar o elemento, eu sou forçado a usar nomes de elementos totalmente qualificado porque esse documento XML contém um atributo xmlns em sua raiz. Isso requer criações pesados ??de instâncias XName:

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));

Quando o que eu realmente quero é simplesmente,

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

Existe uma maneira de fazer LINQ to XML assumem um namespace específico para que eu não tenho que manter especificá-lo?

Foi útil?

Solução

Eu não acho que você pode (ver Jon Skeet comentário ), mas existem alguns truques que você pode fazer.

1) criar um método de extensão que acrescenta o XNamespace para a cadeia

2) Use VB ?!?

Outras dicas

Você poderia simplificar usando

XNamespace ns = "http://s3.amazonaws.com/doc/2006-03-01/";
var ownerElement = xml.Element(ns + "AccessControlPolicy").Element(ns + "Owner");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top