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 回答