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。 使用此转换的最常见位置是在构造元素或特性时:构造函数的第一个XName参数XElement是 。 通过传递字符串,可以利用隐式转换。 以下代码创建一个名称不位于命名空间中的元素:

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>  

将字符串分配给 使用 XNameString的隐式转换。

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

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

在命名空间中创建 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.  

使用扩展的名称

还可以从格式为 的展开的 XML 名称{namespace}localname创建 XName

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

返回此 XNamespaceXName 的 URI。

方法

Equals(Object)

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

Get(String)

从展开名称获取 XName 对象。

Get(String, 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

适用于

另请参阅