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 オブジェクトはアトミック化することが保証されます。つまり、2 つの XName オブジェクトの名前空間がまったく同じで、ローカル名がまったく同じ場合、同じインスタンスが共有されます。 等値演算子と比較演算子も、この目的のために明示的に提供されます。

その他の利点の中でも、この機能を使用すると、クエリをより高速に実行できます。 要素または属性の名前をフィルター処理する場合、述語で表される比較では、値の比較ではなく、ID 比較が使用されます。 2 つの文字列を比較するよりも、2 つの参照が実際に同じオブジェクトを参照していることを確認する方がはるかに高速です。

プロパティ

名前 説明
LocalName

名前のローカル (修飾されていない) 部分を取得します。

Namespace

完全修飾名の名前空間部分を取得します。

NamespaceName

このXNamespaceXNameの URI を返します。

メソッド

名前 説明
Equals(Object)

指定した XName がこの XNameと等しいかどうかを判断します。

Get(String, String)

ローカル名と名前空間から XName オブジェクトを取得します。

Get(String)

展開された名前から XName オブジェクトを取得します。

GetHashCode()

この XNameのハッシュ コードを取得します。

GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
ToString()

展開された XML 名を {namespace}localname形式で返します。

演算子

名前 説明
Equality(XName, XName)

XNameの 2 つのインスタンスが等しいかどうかを示す値を返します。

Implicit(String to XName)

展開された XML 名 (つまり、{namespace}localname) として書式設定された文字列を XName オブジェクトに変換します。

Inequality(XName, XName)

XNameの 2 つのインスタンスが等しくないかどうかを示す値を返します。

明示的なインターフェイスの実装

名前 説明
IEquatable<XName>.Equals(XName)

現在の XName が指定した XNameと等しいかどうかを示します。

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

ターゲット オブジェクトをシリアル化するために必要なデータを SerializationInfo に設定します。

適用対象

こちらもご覧ください