XmlElement と XmlNode の違い - C#

XmlElementとXmlNodeの違いを紹介します。

XmlElementとXmlNodeの違い

  • XmlElementはXmlNodeクラスを継承している (XmlElementのほうが機能が多い)
  • XmlElementにはSetAttributes SetAttributeNodeの属性編集用メソッドが提供されている
  • XmlElementにはGetAttributes GetAttributeNodeの属性取得用メソッドが提供されている
  • XmlElementにはRemoveAllAttributes RemoveAttribute RemoveAttributeAt RemoveAttributeNode の属性削除メソッドが提供されている
  • XmlElementには要素のタグが短い形式(<tag />)である(要素の中が空である)ことを判定するIsEmptyプロパティが用意されている
一見するとXmlElementは万能そうに見えますが、XmlDocument.CreateElement()ではElementとしてXmlElementクラスを作成します。一方XmlDocument.CreateNode()メソッドでは引数にXmlNodeTypeを指定できます。このためXmlNodeはXML宣言部分やエンティティ宣言部分、コメントなどの要素になることができます。
XmlDocument.CerateNode()で指定できるXmlNodeTypeには次のものがあります。

XmlNodeType (MSDNより)


メンバ名説明
Attribute属性 (例 : id='123')Attribute ノードには、Text および EntityReference の 2 つの子ノード型を含めることができます。Attribute ノードは、他のノード型の子ノードになることはありません。このノードは、Element の子ノードとは見なされません。
CDATACDATA セクション (例 : <![CDATA[my escaped text]]>) CDATA セクションは、通常はマークアップとして認識されるテキスト ブロックをエスケープするために使用されます。CDATA ノードには、子ノードを含めることができません。このノードは、DocumentFragment、EntityReference、Element の各ノードの子にすることができます。
Commentコメント (例 : <!-- my comment -->)Comment ノードには、子ノードを含めることができません。このノードは、Document、DocumentFragment、Element、EntityReference の各ノードの子にすることができます。
Documentドキュメント ツリーのルー??して、XML ドキュメント全体へのアクセスを実現するドキュメント オブジェクト。 Document ノードには、XmlDeclaration、Element (最大 1 つ)、ProcessingInstruction、Comment、DocumentType の各子ノード型を含めることができます。このノードは、任意のノード型の子になることはありません。
DocumentFragmentドキュメント フラグメントDocumentFragment ノードは、実際にドキュメントに含まれることはなく、ドキュメントにノードまたはサブツリーを関連付けます。DocumentFragment ノードには、Element、ProcessingInstruction、Comment、Text、CDATA、EntityReference の各子ノード型を含めることができます。このノードは、任意のノード型の子になることはありません。
DocumentType次のようなタグで示されるドキュメント型宣言 (例 : <!DOCTYPE...>)。 DocumentType ノードには、Notation および Entity の 2 つの子ノード型を含めることができます。このノードは、Document ノードの子にすることができます。
Element要素 (例 : <item>)。Element ノードには、Element、Text、Comment、ProcessingInstruction、CDATA、EntityReference の各子ノード型を含めることができます。このノードは、Document、DocumentFragment、Element、EntityReference の各ノードの子にすることができます。
EndElement 終了要素タグ (例 : </item>)XmlReader が要素の末尾に達したときに EndElement ノードが返されます。
EndEntityResolveEntity を呼び出した結果、XmlReader がエンティティ置換の末尾に到達したときに返されます。
Entityエンティティ宣言 (例 : <!ENTITY...>) Entity ノードには、展開されたエンティティを表す子ノード (Text ノードや EntityReference ノードなど) を含めることができます。このノードは、DocumentType ノードの子にすることができます。
EntityReference エンティティへの参照 (例 : &num;)EntityReference ノードには、Element、ProcessingInstruction、Comment、Text、CDATA、および EntityReference の各子ノード型を含めることができます。このノードは、Attribute、DocumentFragment、Element、および EntityReference の各ノードの子にすることができます。
NoneRead メソッドが呼び出されなかった場合に、XmlReader によって返されます。
Notationドキュメント型宣言内の表記 (例 : <!NOTATION...>)Notation ノードには、子ノードを含めることができません。このノードは、DocumentType ノードの子にすることができます。
ProcessingInstruction 処理命令 (例 : <?pi test?>)ProcessingInstruction ノードには、子ノードを含めることができません。このノードは、Document、DocumentFragment、Element、EntityReference の各ノードの子にすることができます。
SignificantWhitespace 混合コンテンツ モデル内のマークアップ間にある空白、または xml:space="preserve" スコープ内の空白。
Textノードのテキストの内容Text ノードには、子ノードを含めることができません。このノードは、Attribute、DocumentFragment、Element、EntityReference の各ノードの子にすることができます。
Whitespaceマークアップ間の空白
XmlDeclarationXML 宣言 (例 : <?xml version='1.0'?>)XmlDeclaration ノードは、ドキュメント内の最初のノードにする必要があります。このノードには、子を含めることができません。このノードは、Document ノードの子になります。このノードには、バージョン情報およびエンコーディング情報を提供する属性を含めることができます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2021-08-24
作成日: 2011-01-12
iPentec all rights reserverd.