XML ドキュメントがメモリ内にある場合、概念表現はツリーです。 プログラミングの場合、ツリーのノードにアクセスするためのオブジェクト階層があります。 次の例は、XML コンテンツがノードになる方法を示しています。
XML が XML ドキュメント オブジェクト モデル (DOM) に読み込まれると、その部分はノードに変換され、これらのノードはノードの種類や値など、それ自体に関する追加のメタデータを保持します。 ノードの種類はそのオブジェクトであり、実行できるアクションと、設定または取得できるプロパティを決定します。
次の単純な XML がある場合:
入力
<book>
<title>The Handmaid's Tale</title>
</book>
入力は、割り当てられたノード型プロパティを持つ次のノード ツリーとしてメモリ内で表されます。
の例
ブックとタイトル ノード ツリーの表現
book
要素は XmlElement オブジェクトになり、次の要素title
も XmlElement になり、要素の内容は XmlText オブジェクトになります。
XmlElement のメソッドとプロパティを見ると、メソッドとプロパティは、XmlText オブジェクトで使用できるメソッドとプロパティとは異なります。 そのため、XML マークアップがどのノードタイプになるかを知ることは重要です。これは、そのノードタイプが実行できるアクションを決定するためです。
次の例では、XML データを読み取り、ノードの種類に応じて異なるテキストを書き出します。 次の XML データ ファイルを入力として使用 して、items.xmlします。
入力
<?xml version="1.0"?>
<!-- This is a sample XML document -->
<!DOCTYPE Items [<!ENTITY number "123">]>
<Items>
<Item>Test with an entity: &number;</Item>
<Item>test with a child element <more/> stuff</Item>
<Item>test with a CDATA section <![CDATA[<456>]]> def</Item>
<Item>Test with a char entity: A</Item>
<!-- Fourteen chars in this element.-->
<Item>1234567890ABCD</Item>
</Items>
次のコード例では、 items.xml ファイルを読み取り、各ノードの種類の情報を表示します。
Imports System
Imports System.IO
Imports System.Xml
Public Class Sample
Private Const filename As String = "items.xml"
Public Shared Sub Main()
Dim reader As XmlTextReader = Nothing
Try
' Load the reader with the data file and
'ignore all white space nodes.
reader = New XmlTextReader(filename)
reader.WhitespaceHandling = WhitespaceHandling.None
' Parse the file and display each of the nodes.
While reader.Read()
Select Case reader.NodeType
Case XmlNodeType.Element
Console.Write("<{0}>", reader.Name)
Case XmlNodeType.Text
Console.Write(reader.Value)
Case XmlNodeType.CDATA
Console.Write("<![CDATA[{0}]]>", reader.Value)
Case XmlNodeType.ProcessingInstruction
Console.Write("<?{0} {1}?>", reader.Name, reader.Value)
Case XmlNodeType.Comment
Console.Write("<!--{0}-->", reader.Value)
Case XmlNodeType.XmlDeclaration
Console.Write("<?xml version='1.0'?>")
Case XmlNodeType.Document
Case XmlNodeType.DocumentType
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value)
Case XmlNodeType.EntityReference
Console.Write(reader.Name)
Case XmlNodeType.EndElement
Console.Write("</{0}>", reader.Name)
End Select
End While
Finally
If Not (reader Is Nothing) Then
reader.Close()
End If
End Try
End Sub 'Main ' End class
End Class 'Sample
using System;
using System.IO;
using System.Xml;
public class Sample
{
private const String filename = "items.xml";
public static void Main()
{
XmlTextReader reader = null;
try
{
// Load the reader with the data file and ignore
// all white space nodes.
reader = new XmlTextReader(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
// Parse the file and display each of the nodes.
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
Console.Write("<{0}>", reader.Name);
break;
case XmlNodeType.Text:
Console.Write(reader.Value);
break;
case XmlNodeType.CDATA:
Console.Write("<![CDATA[{0}]]>", reader.Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
Console.Write("<!--{0}-->", reader.Value);
break;
case XmlNodeType.XmlDeclaration:
Console.Write("<?xml version='1.0'?>");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
break;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
break;
case XmlNodeType.EndElement:
Console.Write("</{0}>", reader.Name);
break;
}
}
}
finally
{
if (reader != null)
reader.Close();
}
}
} // End class
この例の出力では、ノードの種類へのデータのマッピングが明らかになります。
アウトプット
<?xml version='1.0'?><!--This is a sample XML document --><!DOCTYPE Items [<!ENTITY number "123">]<Items><Item>Test with an entity: 123</Item><Item>test with a child element <more> stuff</Item><Item>test with a CDATA section <![CDATA[<456>]]> def</Item><Item>Test with a char entity: A</Item><--Fourteen chars in this element.--><Item>1234567890ABCD</Item></Items>
一度に 1 行ずつ入力し、コードから生成された出力を使用して、次の表を使用して、どの出力行を生成したノード テストを分析し、どのような XML データがノードの種類になったかを理解できます。
インプット | アウトプット | ノードの種類のテスト |
---|---|---|
<?xml version="1.0"?> | <?xml version='1.0'?> | XmlNodeType.XmlDeclaration |
<-- これはサンプル XML ドキュメントです--> | <--これはサンプル XML ドキュメントです--> | XmlNodeType.Comment |
<!DOCTYPE アイテム [<!ENTITY 番号 "123">]> | <!DOCTYPE アイテム [<!ENTITY 番号 "123">] | XmlNodeType.DocumentType |
<項目> | <項目> | XmlNodeType.Element |
<アイテム> | <アイテム> | XmlNodeType.Element |
エンティティを使用してテストする: > | エンティティを使用してテストする: 123 | XmlNodeType.Text |
</アイテム> | </アイテム> | XmlNodeType.EndElement |
<アイテム> | <アイテム> | XmNodeType.Element |
子要素を使用してテストする | 子要素を使用してテストする | XmlNodeType.Text |
<もっとその> | <もっとその> | XmlNodeType.Element |
詰め込む | 詰め込む | XmlNodeType.Text |
</アイテム> | </アイテム> | XmlNodeType.EndElement |
<アイテム> | <アイテム> | XmlNodeType.Element |
CDATA セクションを使用してテストする | CDATA セクションを使用してテストする | XmlTest.Text |
<![CDATA[<456>]]> | <![CDATA[<456>]]> | XmlTest.CDATA |
デフ | デフ | XmlNodeType.Text |
</アイテム> | </アイテム> | XmlNodeType.EndElement |
<アイテム> | <アイテム> | XmlNodeType.Element |
char エンティティを使用してテストする: >#65; | char エンティティを使用してテストする: A | XmlNodeType.Text |
</アイテム> | </アイテム> | XmlNodeType.EndElement |
<この要素の 14 文字を--します。--> | <--この要素の 14 文字。--> | XmlNodeType.Comment |
<アイテム> | <アイテム> | XmlNodeType.Element |
1234567890ABCD | 1234567890ABCD | XmlNodeType.Text |
</アイテム> | </アイテム> | XmlNodeType.EndElement |
</項目> | </項目> | XmlNodeType.EndElement |
ノードの種類によって有効なアクションの種類と、設定および取得できるプロパティの種類が制御されるため、割り当てられるノードの種類を把握しておく必要があります。
空白のノード作成は、 PreserveWhitespace フラグによってデータが DOM に読み込まれるときに制御されます。 詳細については、「DOM の 読み込み時の空白と重要な空白処理」を参照してください。
DOM に新しいノードを追加するには、「 XML ドキュメントへのノードの挿入」を参照してください。 DOM からノードを削除するには、「 XML ドキュメントからのノード、コンテンツ、値の削除」を参照してください。 DOM 内のノードの内容を変更するには、「 XML ドキュメント内のノード、コンテンツ、および値の変更」を参照してください。
こちらも参照ください
.NET