Index: trunk/Include/Classes/System/Xml/XmlNode.ab
===================================================================
--- trunk/Include/Classes/System/Xml/XmlNode.ab	(revision 402)
+++ 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>
 
 
