Можно ли избежать использования полностью определенных имен элементов в LINQ to XML? - PullRequest
1 голос
/ 22 мая 2009

Скажем, я вызываю XElement.Parse () со следующей строкой 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">
      ...
  ");

Когда приходит время запрашивать элемент, я вынужден использовать полные имена элементов, потому что этот документ XML содержит в своем корне атрибут xmlns. Это требует громоздких созданий экземпляров 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));

Когда я действительно хочу просто,

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

Есть ли способ сделать LINQ to XML предположить, определенное пространство имен, чтобы мне не приходилось его задавать?

Ответы [ 2 ]

3 голосов
/ 22 мая 2009

Вы можете упростить, используя

XNamespace ns = "http://s3.amazonaws.com/doc/2006-03-01/";
var ownerElement = xml.Element(ns + "AccessControlPolicy").Element(ns + "Owner");
1 голос
/ 23 мая 2009

Не думаю, что вы можете (см. комментарий Джона Скита ), но есть несколько приемов, которые вы можете сделать.

1) создайте метод расширения, который добавляет XNamespace к вашей строке

2) Использовать VB ?!?

...