Index: /trunk/Include/Classes/System/Xml/XmlAttribute.ab
===================================================================
--- /trunk/Include/Classes/System/Xml/XmlAttribute.ab	(revision 424)
+++ /trunk/Include/Classes/System/Xml/XmlAttribute.ab	(revision 424)
@@ -0,0 +1,20 @@
+Namespace System
+Namespace Xml
+
+/*!
+@brief	属性を表します。
+*/
+Class XmlAttribute
+	Inherits XmlNode
+
+Public
+	Sub XmlAttribute( prefix As String, localName As String, namespaceURI As String, doc As XmlDocument )
+		XmlNode( prefix, localName, namespaceURI, doc )
+	End Sub
+End Class
+
+TypeDef XmlAttributeCollection = System.Collections.Generic.List<XmlAttribute>
+
+
+End Namespace
+End Namespace
Index: /trunk/Include/Classes/System/Xml/XmlCharacterData.ab
===================================================================
--- /trunk/Include/Classes/System/Xml/XmlCharacterData.ab	(revision 424)
+++ /trunk/Include/Classes/System/Xml/XmlCharacterData.ab	(revision 424)
@@ -0,0 +1,22 @@
+Namespace System
+Namespace Xml
+
+/*!
+@brief	複数のクラスで使用する、テキスト操作メソッドを提供します。
+*/
+Class XmlCharacterData
+	Inherits XmlLinkedNode
+
+Public
+
+	/*!
+	@brief	コンストラクタ
+	*/
+	Sub XmlCharacterData( data As String, doc As XmlDocument )
+		XmlLinkedNode( data, doc )
+	End Sub
+End Class
+
+
+End Namespace
+End Namespace
Index: /trunk/Include/Classes/System/Xml/XmlDeclaration.ab
===================================================================
--- /trunk/Include/Classes/System/Xml/XmlDeclaration.ab	(revision 424)
+++ /trunk/Include/Classes/System/Xml/XmlDeclaration.ab	(revision 424)
@@ -0,0 +1,25 @@
+Namespace System
+Namespace Xml
+
+/*!
+@brief	XML 宣言ノード <?xml version='1.0' ...?> を表します。
+*/
+Class XmlDeclaration
+	Inherits XmlLinkedNode
+
+	version As String
+	encoding As String
+	standalone As String
+
+Public
+	Sub XmlDeclaration( version As String, encoding As String, standalone As String, doc As XmlDocument )
+		XmlLinkedNode( "", "xml", "", doc )
+		This.version = version
+		This.encoding = encoding
+		This.standalone = standalone
+	End Sub
+End Class
+
+
+End Namespace
+End Namespace
Index: /trunk/Include/Classes/System/Xml/XmlDocument.ab
===================================================================
--- /trunk/Include/Classes/System/Xml/XmlDocument.ab	(revision 423)
+++ /trunk/Include/Classes/System/Xml/XmlDocument.ab	(revision 424)
@@ -7,4 +7,13 @@
 Class XmlDocument
 	Inherits XmlNode
+
+	Sub VerifyLocalName( name As String )
+		If Object.ReferenceEquals( name, Nothing ) Then
+			' Throw System.ArgumentException()
+		ElseIf name.Length = 0 Then
+			' Throw System.ArgumentException()
+		End If
+	End Sub
+
 Public
 
@@ -13,4 +22,5 @@
 	*/
 	Sub XmlDocument()
+		XmlNode( "", "#document", "", Nothing )
 	End Sub
 
@@ -27,10 +37,26 @@
 	'End Sub
 
-	Function AppendChild( newChild As XmlNode ) As XmlNode
-		' TODO: 実装
+	/*!
+	@brief	指定した値を使用して、XmlDeclaration ノードを作成します。
+	*/
+	Function CreateXmlDeclaration( version As String, encoding As String, standalone As String ) As XmlDeclaration
+		Return New XmlDeclaration( version ,encoding, standalone, This )
 	End Function
 
-	Function CloneNode( deep As Boolean ) As XmlNode
-		' TODO: 実装
+	/*!
+	@brief	指定した名前を使用して要素を作成します。
+	*/
+	Function CreateElement( name As String ) As XmlElement
+		VerifyLocalName( name )
+
+		Return New XmlElement( "", name, "", This )
+	End Function
+
+	/*!
+	@brief	このノードとそのすべての子ノードを表すマークアップを取得します。
+	@return	このノードとそのすべての子ノードを格納しているマークアップ。
+	*/
+	Override Function OuterXml() As String
+		Return This.InnerXml
 	End Function
 
Index: /trunk/Include/Classes/System/Xml/XmlElement.ab
===================================================================
--- /trunk/Include/Classes/System/Xml/XmlElement.ab	(revision 424)
+++ /trunk/Include/Classes/System/Xml/XmlElement.ab	(revision 424)
@@ -0,0 +1,18 @@
+Namespace System
+Namespace Xml
+
+/*!
+@brief	要素を表します。
+*/
+Class XmlElement
+	Inherits XmlLinkedNode
+
+Public
+	Sub XmlElement( prefix As String, localName As String, namespaceURI As String, doc As XmlDocument )
+		XmlLinkedNode( prefix, localName, namespaceURI, doc )
+	End Sub
+End Class
+
+
+End Namespace
+End Namespace
Index: /trunk/Include/Classes/System/Xml/XmlLinkedNode.ab
===================================================================
--- /trunk/Include/Classes/System/Xml/XmlLinkedNode.ab	(revision 424)
+++ /trunk/Include/Classes/System/Xml/XmlLinkedNode.ab	(revision 424)
@@ -0,0 +1,28 @@
+Namespace System
+Namespace Xml
+
+/*!
+@brief	このノードの直前または直後のノードを取得します。
+*/
+Class XmlLinkedNode
+	Inherits XmlNode
+Public
+
+	/*!
+	@brief	コンストラクタ
+	*/
+	Sub XmlLinkedNode( prefix As String, localName As String, namespaceURI As String, doc As XmlDocument )
+		XmlNode( prefix, localName, namespaceURI, doc )
+	End Sub
+
+	/*!
+	@brief	コンストラクタ
+	*/
+	Sub XmlLinkedNode( data As String, doc As XmlDocument )
+		XmlNode( data, doc )
+	End Sub
+End Class
+
+
+End Namespace
+End Namespace
Index: /trunk/Include/Classes/System/Xml/XmlNode.ab
===================================================================
--- /trunk/Include/Classes/System/Xml/XmlNode.ab	(revision 423)
+++ /trunk/Include/Classes/System/Xml/XmlNode.ab	(revision 424)
@@ -6,20 +6,99 @@
 */
 Class XmlNode
+
+	'attributes As XmlAttributeCollection
+	childNodes As XmlNodeList
+	prefix As String
+	localName As String
+	namespaceURI As String
+	ownerDocument As XmlDocument
+	value As String
+
+	Function InnerXmlSupportedIndent( isIndent = False As Boolean, indent = 0 As Long ) As String
+		Dim result = ""
+		If Not ActiveBasic.IsNothing( childNodes ) Then
+			' 子ノード
+			Foreach childNode In childNodes
+				result += childNode.OwnerXmlSupportedIndent( isIndent, indent )
+			Next
+		End If
+		Return result
+	End Function
+
+	Function OwnerXmlSupportedIndent( isIndent = False As Boolean, indent = 0 As Long ) As String
+		Dim indentStr = ""
+		Dim crlfStr = ""
+		If isIndent Then
+			' インデントをサポートする場合
+			Dim i As Long
+			For i=0 To ELM(indent)
+				indentStr += Ex"\t"
+			Next
+
+			crlfStr = Ex"\r\n"
+		End If
+
+		If childNodes.Count = 0 Then
+			Return indentStr + "<" + localName + " />" + crlfStr
+		End If
+
+		Dim result = ""
+
+		' 開始タグ
+		result += indentStr + "<" + localName + ">" + crlfStr
+
+		' 子ノードリスト
+		result += InnerXmlSupportedIndent( isIndent, indent + 1 )
+
+		' 終了タグ
+		result += indentStr + "</" + localName + ">" + crlfStr
+
+		Return result
+	End Function
+
 Public
 
-	attributes As XmlAttributeCollection
-	childNodes As XmlNodeList
+	/*!
+	@brief	コンストラクタ
+	*/
+	Sub XmlNode( prefix As String, localName As String, namespaceURI As String, doc As XmlDocument )
+		This.prefix = prefix
+		This.localName = localName
+		This.namespaceURI = namespaceURI
+		This.ownerDocument = doc
+		This.value = Nothing
+
+		childNodes = New XmlNodeList()
+	End Sub
+
+	/*!
+	@brief	コンストラクタ
+	*/
+	Sub XmlNode( data As String, doc As XmlDocument )
+		This.prefix = Nothing
+		This.localName = Nothing
+		This.namespaceURI = Nothing
+		This.ownerDocument = doc
+		This.value = data
+
+		childNodes = Nothing
+	End Sub
+
+
+	'----------------------------------------------------------------
+	' パブリック プロパティ
+	'----------------------------------------------------------------
 
 	/*!
 	@brief	名前またはインデックスによってアクセスできる属性のコレクションを表します。
 	*/
-	Function Attributes() As XmlAttributeCollection
-		Return attributes
-	End Function
+	'Virtual Function Attributes() As XmlAttributeCollection
+	'	Return attributes
+	'End Function
 
 	/*!
 	@brief	子ノードリストを返します。
 	*/
-	Function ChildNodes() As XmlNodeList
+	Virtual Function ChildNodes() As XmlNodeList
 		Return childNodes
 	End Function
@@ -28,5 +107,5 @@
 	@brief	ノードの最初の子を取得します。
 	*/
-	Function FirstChild() As XmlNode
+	Virtual Function FirstChild() As XmlNode
 		If childNodes.Count = 0 Then
 			' 子ノードが1つもないときはNothingを返す
@@ -39,13 +118,68 @@
 	@brief	子ノードが1つ以上あるかどうかを取得します。
 	*/
-	Function HasChildNodes() As Boolean
+	Virtual Function HasChildNodes() As Boolean
 		Return Not ( childNodes.Count = 0 )
 	End Function
 
 	/*!
+	@brief	このノードの子ノードだけを表すマークアップを取得または設定します。
+	*/
+	Virtual Function InnerXml() As String
+		Return InnerXmlSupportedIndent()
+	End Function
+
+	/*!
+	@brief	ノードのローカル名を取得します。 
+	@return	ノードのローカル名。
+	*/
+	Virtual Function LocalName() As String
+		return localName
+	End Function
+
+	/*!
+	@brief	このノードの名前空間 URI を取得します。
+	@return	このノードの名前空間 URI。
+	*/
+	Virtual Function NamespaceURI() As String
+		return NamespaceURI
+	End Function
+
+	/*!
+	@brief	このノードとそのすべての子ノードを表すマークアップを取得します。
+	@return	このノードとそのすべての子ノードを格納しているマークアップ。
+	*/
+	Virtual Function OuterXml() As String
+		Return OwnerXmlSupportedIndent()
+	End Function
+
+	/*!
+	@brief	このノードが属する XmlDocument を取得します。
+	@return	このノードが属する XmlDocument。
+	*/
+	Virtual Function OwnerDocument() As XmlDocument
+		Return ownerDocument
+	End Function
+
+	/*!
+	@brief	このノードの名前空間プリフィックスを取得または設定します。
+	@return	このノードの名前空間プリフィックス。たとえば、プリフィックスは要素 <bk:book> の bk です。プリフィックスがない場合、このプロパティは String.Empty を返します。
+	*/
+	Virtual Function Prefix() As String
+		return prefix
+	End Function
+
+	
+
+
+	'----------------------------------------------------------------
+	' パブリック メソッド
+	'----------------------------------------------------------------
+
+	/*!
 	@brief	このノードの子ノードリストの末尾に指定したノードを追加する。
 	*/
-	Function AppendChild( newChild As XmlNode ) As XmlNode
-		' TODO: 実装
+	Virtual Function AppendChild( newChild As XmlNode ) As XmlNode
+		childNodes.Add( newChild )
+		Return newChild
 	End Function
 
@@ -53,5 +187,5 @@
 	@brief	ノードを複製する。
 	*/
-	Function Clone() As XmlNode
+	Virtual Function Clone() As XmlNode
 		' TODO: 実装
 	End Function
@@ -60,5 +194,5 @@
 	@brief	派生クラスでオーバーライドされた場合は、ノードの複製を作成する。
 	*/
-	Function CloneNode( deep As Boolean ) As XmlNode
+	Virtual Function CloneNode( deep As Boolean ) As XmlNode
 		' TODO: 実装
 	End Function
@@ -67,5 +201,5 @@
 	@brief	XmlNode のノードに対する Foreachスタイルの反復をサポートします。
 	*/
-	Function GetEnumerator() As IEnumerator
+	Virtual Function GetEnumerator() As IEnumerator
 		' TODO: 実装
 	End Function
@@ -77,5 +211,5 @@
 	@return	挿入されるノード。
 	*/
-	Function InsertAfter( newChild As XmlNode, refChild As XmlNode ) As XmlNode
+	Virtual Function InsertAfter( newChild As XmlNode, refChild As XmlNode ) As XmlNode
 		' TODO: 実装
 	End Function
@@ -87,5 +221,5 @@
 	@return	挿入されるノード。
 	*/
-	Function InsertBefore( newChild As XmlNode, refChild As XmlNode ) As XmlNode
+	Virtual Function InsertBefore( newChild As XmlNode, refChild As XmlNode ) As XmlNode
 		' TODO: 実装
 	End Function
@@ -96,5 +230,5 @@
 	@return	挿入されるノード。
 	*/
-	Function PrependChild( newChild As XmlNode ) As XmlNode
+	Virtual Function PrependChild( newChild As XmlNode ) As XmlNode
 		' TODO: 実装
 	End Function
@@ -103,5 +237,5 @@
 	@brief	現在のノードのすべての子ノードと属性の両方、またはそのいずれかを削除します。
 	*/
-	Sub RemoveAll()
+	Virtual Sub RemoveAll()
 		' TODO: 実装
 	End Sub
@@ -112,5 +246,5 @@
 	@return	削除されたノード。
 	*/
-	Function RemoveChild( oldChild As XmlNode ) As XmlNode
+	Virtual Function RemoveChild( oldChild As XmlNode ) As XmlNode
 		' TODO: 実装
 	End Function
@@ -122,9 +256,11 @@
 	@return	置き換えられたノード。
 	*/
-	Function ReplaceChild( newChild As XmlNode, oldChild As XmlNode ) As XmlNode
+	Virtual Function ReplaceChild( newChild As XmlNode, oldChild As XmlNode ) As XmlNode
 		' TODO: 実装
 	End Function
 
 End Class
+
+TypeDef XmlNodeList = System.Collections.Generic.List<XmlNode>
 
 
Index: /trunk/Include/Classes/System/Xml/XmlText.ab
===================================================================
--- /trunk/Include/Classes/System/Xml/XmlText.ab	(revision 424)
+++ /trunk/Include/Classes/System/Xml/XmlText.ab	(revision 424)
@@ -0,0 +1,22 @@
+Namespace System
+Namespace Xml
+
+/*!
+@brief	複数のクラスで使用する、テキスト操作メソッドを提供します。
+*/
+Class XmlText
+	Inherits XmlCharacterData
+
+Public
+
+	/*!
+	@brief	コンストラクタ
+	*/
+	Sub XmlText( strData As String, doc As XmlDocument )
+		XmlCharacterData( strData, doc )
+	End Sub
+End Class
+
+
+End Namespace
+End Namespace
Index: /trunk/Include/Classes/index.ab
===================================================================
--- /trunk/Include/Classes/index.ab	(revision 423)
+++ /trunk/Include/Classes/index.ab	(revision 424)
@@ -94,2 +94,10 @@
 #require "./System/Windows/Forms/misc.ab"
 #require "./System/Windows/Forms/PaintEventArgs.ab"
+#require "./System/Xml/XmlAttribute.ab"
+#require "./System/Xml/XmlCharacterData.ab"
+#require "./System/Xml/XmlDeclaration.ab"
+#require "./System/Xml/XmlDocument.ab"
+#require "./System/Xml/XmlElement.ab"
+#require "./System/Xml/XmlLinkedNode.ab"
+#require "./System/Xml/XmlNode.ab"
+#require "./System/Xml/XmlText.ab"
Index: /trunk/TestCase/SimpleTestCase/SimpleTestCase.idx
===================================================================
--- /trunk/TestCase/SimpleTestCase/SimpleTestCase.idx	(revision 423)
+++ /trunk/TestCase/SimpleTestCase/SimpleTestCase.idx	(revision 424)
@@ -34,2 +34,8 @@
 #include "EncodingTest.ab"
 _ClearNamespaceImported
+#include "XmlTest.ab"
+_ClearNamespaceImported
+
+'リソースファイル
+#include "resource.ab"
+#resource "SimpleTestCase.rc"
Index: /trunk/TestCase/SimpleTestCase/SimpleTestCase.pj
===================================================================
--- /trunk/TestCase/SimpleTestCase/SimpleTestCase.pj	(revision 423)
+++ /trunk/TestCase/SimpleTestCase/SimpleTestCase.pj	(revision 424)
@@ -42,2 +42,3 @@
 TypeInfoTest.ab
 EncodingTest.ab
+XmlTest.ab
Index: /trunk/TestCase/SimpleTestCase/XmlTest.ab
===================================================================
--- /trunk/TestCase/SimpleTestCase/XmlTest.ab	(revision 424)
+++ /trunk/TestCase/SimpleTestCase/XmlTest.ab	(revision 424)
@@ -0,0 +1,15 @@
+Namespace XmlTest
+
+
+Sub TestMain()
+	Dim doc = New System.Xml.XmlDocument()
+	doc.AppendChild( doc.CreateXmlDeclaration( "1.0", "UTF-8", Nothing ) )
+	doc.AppendChild( doc.CreateElement( "root" ) )
+	doc.ChildNodes[1].AppendChild( doc.CreateElement( "test" ) )
+	System.Diagnostics.Debug.WriteLine( doc.OuterXml() )
+End Sub
+
+
+End Namespace
+
+XmlTest.TestMain()
