1

次のXML文字列を使用してXElement.Parse()を呼び出すとします。

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に特定の名前空間を想定させる方法があるので、それを指定し続ける必要はありませんか?

4

2 に答える 2

3

あなたは使用することによって単純化することができます

XNamespace ns = "http://s3.amazonaws.com/doc/2006-03-01/";
var ownerElement = xml.Element(ns + "AccessControlPolicy").Element(ns + "Owner");
于 2009-05-22T15:17:21.027 に答える
1

私はあなたができるとは思いませんが(Jon Skeetのコメントを参照)、あなたができるいくつかのトリックがあります。

1)文字列にXNamespaceを追加する拡張メソッドを作成します

2)VBを使用しますか?!?

于 2009-05-23T02:05:00.260 に答える