c# - 是否可以避免在 LINQ to XML 中使用完全限定的元素名称?

标签 c# linq-to-xml xml-namespaces

假设我使用以下 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 假设一个特定的命名空间,这样我就不必一直指定它了?

最佳答案

你可以通过使用来简化

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

关于c# - 是否可以避免在 LINQ to XML 中使用完全限定的元素名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/898394/

相关文章:

xml - XML中的 "xmlns"是什么意思?

c# - 从输出中删除异常消息

c# - 有人有一些示例代码可以在 C# 中创建可由任何 OLE DB 应用程序使用的 OLE DB 提供程序吗?

c# - (c++/cli) C++ 使用 C# dll 获取任何枚举成员名称

.net - 多个后代类型 linq

c# - Linq 到 XML 顺序

c# - 如何选择使用默认命名空间的节点?

css - 当节点具有 xmlns 属性时,Nokogiri 查找 css 失败

c# - 在 C# 中创建 <base class> 类型的变量来存储 <derived class> 对象

c# - 如何学习 LINQ 中的查询