XName 类

定义

表示 XML 元素或属性的名称。

public ref class XName sealed : IEquatable<System::Xml::Linq::XName ^>
public ref class XName sealed : IEquatable<System::Xml::Linq::XName ^>, System::Runtime::Serialization::ISerializable
public sealed class XName : IEquatable<System.Xml.Linq.XName>
public sealed class XName : IEquatable<System.Xml.Linq.XName>, System.Runtime.Serialization.ISerializable
[System.Serializable]
public sealed class XName : IEquatable<System.Xml.Linq.XName>, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.Serialization.KnownType(typeof(System.Xml.Linq.NameSerializer))]
public sealed class XName : IEquatable<System.Xml.Linq.XName>, System.Runtime.Serialization.ISerializable
type XName = class
    interface IEquatable<XName>
type XName = class
    interface IEquatable<XName>
    interface ISerializable
[<System.Serializable>]
type XName = class
    interface IEquatable<XName>
    interface ISerializable
[<System.Serializable>]
[<System.Runtime.Serialization.KnownType(typeof(System.Xml.Linq.NameSerializer))>]
type XName = class
    interface IEquatable<XName>
    interface ISerializable
Public NotInheritable Class XName
Implements IEquatable(Of XName)
Public NotInheritable Class XName
Implements IEquatable(Of XName), ISerializable
继承
XName
属性
实现

注解

XML 名称包括命名空间和本地名称。 完全限定的名称是命名空间和本地名称的组合。

创建 XName 对象

XName 不包含任何公共构造函数。 相反,此类提供来自“String”的隐式转换,使你可以创建 XName。 使用此转换的最常见位置是在构造元素或属性时:构造函数的第一个参数 XElement 是一个 XName。 通过传递字符串,可以利用隐式转换。 以下代码创建了一个没有所属命名空间的元素:

XElement root = new XElement("ElementName", "content");
Console.WriteLine(root);

在 Visual Basic 中,更适合使用 XML 文本:

Dim root As XElement = <ElementName>content</ElementName>
Console.WriteLine(root)

此示例生成以下输出:

<ElementName>content</ElementName>

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

Visual Basic 示例使用 XML 文本创建 XElement 。 即使使用 XML 文本,也会为 XName 创建一个 XElement 对象。

此外,还可为 Get 对象调用 XName 方法。 但是,建议的方法是使用字符串中的隐式转换。

在命名空间中创建 XName

与 XML 一样,一个 XName 可以位于命名空间中,也可以不位于命名空间中。

对于 C#,建议在命名空间中创建对象 XName 的方法是声明 XNamespace 对象,然后使用加法运算符的重写。

对于 Visual Basic,建议的方法是使用 XML 文本和全局命名空间声明来创建命名空间中的 XML。

XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "ElementName", "content");
Console.WriteLine(root);
Imports <xmlns="http://www.adventure-works.com">

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

此示例生成以下输出:

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

创建位于命名空间中的 XName

保证 Namespace 对象的属性 XName 不为 null。 XName如果不存在命名空间,则该Namespace属性将设置为 None。 以下代码演示了这一点:

XElement root = new XElement("ElementName", "content");
if (root.Name.Namespace == XNamespace.None)
    Console.WriteLine("The element is in no namespace.");
else
    Console.WriteLine("The element is in a namespace.");
Dim root As XElement = <ElementName>content</ElementName>
If (root.Name.Namespace Is XNamespace.None) Then
    Console.WriteLine("The element is in no namespace.")
Else
    Console.WriteLine("The element is in a namespace.")
End If

此示例生成以下输出:

The element is in no namespace.

使用扩展名称

您还可以从格式为XName的扩展 XML 名称中创建一个{namespace}localname

XElement root = new XElement("{http://www.adventure-works.com}ElementName", "content");
Console.WriteLine(root);
Dim root As XElement = New XElement("{http://www.adventure-works.com}ElementName", "content")
Console.WriteLine(root)

此示例生成以下输出:

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

请注意,与创建 XName 对象并使用加法运算符的重写相比,通过扩展名称创建 XNamespace 的效率更低。 它的效率也低于在 Visual Basic 中导入全局命名空间和使用 XML 文本。

如果您使用扩展名创建 XName,则 LINQ to XML 必须查找命名空间的原子化实例。 每次使用扩展名称时,必须重复此操作。 编写 LINQ 查询时,此额外时间可能会忽略不计;但是,创建大型 XML 树时,这一点可能很重要。

XName 对象已原子化

XName 保证对象被原子化;也就是说,如果两个 XName 对象具有相同的命名空间和完全相同的本地名称,则它们将共享同一实例。 出于此目的,还显式提供了相等运算符和比较运算符。

除其他优势外,此功能还允许更快地执行查询。 筛选元素或属性的名称时,以谓词表示的比较使用标识比较,而不是值比较。 确定两个引用实际上引用同一对象比比较两个字符串要快得多。

属性

名称 说明
LocalName

获取名称的本地(未限定)部分。

Namespace

获取完全限定名称的命名空间部分。

NamespaceName

返回此 XNamespaceURL 的 XName URI。

方法

名称 说明
Equals(Object)

确定指定的 XName 值是否等于此 XName

Get(String, String)

XName从本地名称和命名空间获取对象。

Get(String)

从扩展名称中获取对象 XName

GetHashCode()

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

GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
ToString()

以格式 {namespace}localname返回扩展的 XML 名称。

运营商

名称 说明
Equality(XName, XName)

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

Implicit(String to XName)

将格式化为扩展的 XML 名称(即){namespace}localname的字符串转换为对象 XName

Inequality(XName, XName)

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

显式接口实现

名称 说明
IEquatable<XName>.Equals(XName)

指示当前 XName 是否等于指定的 XName

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

使用 SerializationInfo 序列化目标对象所需的数据填充数据。

适用于

另请参阅