XNamespace 类

定义

表示 XML 命名空间。 此类不能被继承。

public ref class XNamespace sealed
public sealed class XNamespace
type XNamespace = class
Public NotInheritable Class XNamespace
继承
XNamespace

注解

此类表示命名空间的 XML 构造。

每个 XName 都包含一个 XNamespace. 即使某个元素不在命名空间中,该元素 XName 仍包含命名空间 XNamespace.None。 属性 XName.Namespace 保证不会是 null

创建 XNamespace 对象

创建 XNamespace 对象的最常见方法是只向其分配字符串。 然后,可以使用加法运算符的重写将命名空间与本地名称合并。 以下示例显示了此成语:

XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root", "Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", "Content")
Console.WriteLine(root)

但是,在 Visual Basic 中,通常声明全局默认命名空间,如下所示:

Imports <xmlns='http://www.adventure-works.com'>

Module Module1
    Sub Main()
        Dim root As XElement = _
            <Root>Content</Root>
        Console.WriteLine(root)
    End Sub
End Module

此示例生成以下输出:

<Root xmlns="http://www.adventure-works.com">Content</Root>

将字符串分配给 XNamespace 时,使用来自 String 的隐式转换。

有关详细信息和示例,请参阅 如何使用 C#(LINQ to XML)创建具有命名空间的文档

有关在 Visual Basic 中使用命名空间的详细信息,请参阅 “使用 XML 命名空间 ”。

控制命名空间前缀

如果创建声明命名空间的属性,则属性中指定的前缀将保留在序列化的 XML 中。 若要创建一个声明具有前缀的命名空间的属性,请创建一个属性,其中属性 Xmlns的名称是命名空间前缀。 属性的值是命名空间的 URI。 以下示例显示了此成语:

XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
    new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
    "Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
    New XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"), _
    "Content")
Console.WriteLine(root)

在 Visual Basic 中,通常使用全局命名空间声明,而不是创建命名空间节点来控制命名空间前缀:

Imports <xmlns:aw='http://www.adventure-works.com'>

Module Module1
    Sub Main()
        Dim root As XElement = _
            <aw:Root>Content</aw:Root>
        Console.WriteLine(root)
    End Sub
End Module

此示例生成以下输出:

<aw:Root xmlns:aw="http://www.adventure-works.com">Content</aw:Root>

有关详细信息,请参阅 如何控制命名空间前缀

创建默认命名空间

构造将成为命名空间的属性时,如果属性名称具有特殊值“xmlns”,则在序列化 XML 树时,命名空间将声明为默认命名空间。 名称为“xmlns”本身的特殊属性不在任何命名空间中。 属性的值是命名空间 URI。

以下示例创建一个 XML 树,其中包含以该命名空间将成为默认命名空间的方式声明的属性:

XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
    new XAttribute("xmlns", "http://www.adventure-works.com"),
    new XElement(aw + "Child", "content")
);
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
    New XAttribute("xmlns", "http://www.adventure-works.com"), _
    New XElement(aw + "Child", "content") _
)
Console.WriteLine(root)

在 Visual Basic 中,通常使用全局默认命名空间声明,而不是创建命名空间节点来创建默认命名空间:

Imports <xmlns='http://www.adventure-works.com'>

Module Module1
    Sub Main()
        Dim root As XElement = _
            <Root>
                <Child>content</Child>
            </Root>
        Console.WriteLine(root)
    End Sub
End Module

此示例生成以下输出:

<Root xmlns="http://www.adventure-works.com">
  <Child>content</Child>
</Root>

XNamespace 原子化

XNamespace 保证对象被原子化;也就是说,如果两个 XNamespace 对象具有相同的 URI,它们将共享同一实例。 出于此目的,显式提供了相等运算符和比较运算符。

使用扩展名称

指定命名空间和本地名称的另一种方法是使用窗体 {namespace}name中的扩展名称:

XElement e = new XElement("{http://www.adventure-works.com}Root",
     new XAttribute("{http://www.adventure-works.com}Att", "content")
);
Console.WriteLine(e);
Dim e As XElement = New XElement("{http://www.adventure-works.com}Root", _
     New XAttribute("{http://www.adventure-works.com}Att", "content") _
)
Console.WriteLine(e)

此示例生成以下输出:

<Root p1:Att="content" xmlns:p1="http://www.adventure-works.com" xmlns="http://www.adventure-works.com" />

此方法对性能有影响。 每次将包含扩展名称的字符串传递给 LINQ to XML 时,它都必须分析名称、查找原子化命名空间和查找原子化名称。 此过程需要 CPU 时间。 如果性能很重要,可能需要使用不同的方法。

使用 Visual Basic 时,建议的方法是使用 XML 文本,这不涉及使用扩展名称。

属性

名称 说明
NamespaceName

获取此命名空间的统一资源标识符(URI)。

None

XNamespace获取与无命名空间对应的对象。

Xml

XNamespace获取对应于 XML URI (http://www.w3.org/XML/1998/namespace) 的对象。

Xmlns

XNamespace获取对应于 xmlns URI (http://www.w3.org/2000/xmlns/) 的对象。

方法

名称 说明
Equals(Object)

确定指定的 XNamespace 值是否等于当前 XNamespace

Get(String)

获取指定统一资源标识符(URI)的一个 XNamespace 值。

GetHashCode()

获取此 XNamespace代码的哈希代码。

GetName(String)

返回 XName 从此 XNamespace 对象和指定的本地名称创建的对象。

GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
ToString()

返回此 XNamespaceURI。

运营商

名称 说明
Addition(XNamespace, String)

将对象XNamespace与本地名称合并以创建 。XName

Equality(XNamespace, XNamespace)

返回一个值,该值指示两个实例 XNamespace 是否相等。

Implicit(String to XNamespace)

将包含统一资源标识符(URI)的字符串转换为 XNamespace

Inequality(XNamespace, XNamespace)

返回一个值,该值指示两个实例 XNamespace 是否不相等。

适用于

另请参阅