Index: trunk/Include/Classes/System/Xml/XmlAttribute.ab
===================================================================
--- trunk/Include/Classes/System/Xml/XmlAttribute.ab	(revision 441)
+++ trunk/Include/Classes/System/Xml/XmlAttribute.ab	(revision 442)
@@ -10,5 +10,5 @@
 Public
 	Sub XmlAttribute( prefix As String, localName As String, namespaceURI As String, doc As XmlDocument )
-		XmlNode( prefix, localName, namespaceURI, doc )
+		XmlNode( XmlNodeType.Attribute, prefix, localName, namespaceURI, doc )
 	End Sub
 End Class
Index: trunk/Include/Classes/System/Xml/XmlCharacterData.ab
===================================================================
--- trunk/Include/Classes/System/Xml/XmlCharacterData.ab	(revision 441)
+++ trunk/Include/Classes/System/Xml/XmlCharacterData.ab	(revision 442)
@@ -13,6 +13,6 @@
 	@brief	コンストラクタ
 	*/
-	Sub XmlCharacterData( data As String, doc As XmlDocument )
-		XmlLinkedNode( data, doc )
+	Sub XmlCharacterData( nodeType As XmlNodeType, data As String, doc As XmlDocument )
+		XmlLinkedNode( nodeType, data, doc )
 	End Sub
 End Class
Index: trunk/Include/Classes/System/Xml/XmlDeclaration.ab
===================================================================
--- trunk/Include/Classes/System/Xml/XmlDeclaration.ab	(revision 441)
+++ trunk/Include/Classes/System/Xml/XmlDeclaration.ab	(revision 442)
@@ -14,9 +14,18 @@
 Public
 	Sub XmlDeclaration( version As String, encoding As String, standalone As String, doc As XmlDocument )
-		XmlLinkedNode( "", "xml", "", doc )
+		XmlLinkedNode( XmlNodeType.XmlDeclaration, "", "xml", "", doc )
 		This.version = version
 		This.encoding = encoding
 		This.standalone = standalone
 	End Sub
+
+Protected
+	Override Function InnerXmlSupportedIndent( isIndent = False As Boolean, indent = 0 As Long ) As String
+		Return Ex"version=\q" + This.version + Ex"\q encoding=\q" + This.encoding + Ex"\q"
+	End Function
+
+	Override Function OwnerXmlSupportedIndent( isIndent = False As Boolean, indent = 0 As Long ) As String
+		Return "<?" + InnerXml + "?>"
+	End Function
 End Class
 
Index: trunk/Include/Classes/System/Xml/XmlDocument.ab
===================================================================
--- trunk/Include/Classes/System/Xml/XmlDocument.ab	(revision 441)
+++ trunk/Include/Classes/System/Xml/XmlDocument.ab	(revision 442)
@@ -22,5 +22,5 @@
 	*/
 	Sub XmlDocument()
-		XmlNode( "", "#document", "", Nothing )
+		XmlNode( XmlNodeType.Document, "", "#document", "", Nothing )
 	End Sub
 
Index: trunk/Include/Classes/System/Xml/XmlElement.ab
===================================================================
--- trunk/Include/Classes/System/Xml/XmlElement.ab	(revision 441)
+++ trunk/Include/Classes/System/Xml/XmlElement.ab	(revision 442)
@@ -10,5 +10,5 @@
 Public
 	Sub XmlElement( prefix As String, localName As String, namespaceURI As String, doc As XmlDocument )
-		XmlLinkedNode( prefix, localName, namespaceURI, doc )
+		XmlLinkedNode( XmlNodeType.Element, prefix, localName, namespaceURI, doc )
 	End Sub
 End Class
Index: trunk/Include/Classes/System/Xml/XmlLinkedNode.ab
===================================================================
--- trunk/Include/Classes/System/Xml/XmlLinkedNode.ab	(revision 441)
+++ trunk/Include/Classes/System/Xml/XmlLinkedNode.ab	(revision 442)
@@ -12,6 +12,6 @@
 	@brief	コンストラクタ
 	*/
-	Sub XmlLinkedNode( prefix As String, localName As String, namespaceURI As String, doc As XmlDocument )
-		XmlNode( prefix, localName, namespaceURI, doc )
+	Sub XmlLinkedNode( nodeType As XmlNodeType, prefix As String, localName As String, namespaceURI As String, doc As XmlDocument )
+		XmlNode( nodeType, prefix, localName, namespaceURI, doc )
 	End Sub
 
@@ -19,6 +19,6 @@
 	@brief	コンストラクタ
 	*/
-	Sub XmlLinkedNode( data As String, doc As XmlDocument )
-		XmlNode( data, doc )
+	Sub XmlLinkedNode( nodeType As XmlNodeType, data As String, doc As XmlDocument )
+		XmlNode( nodeType, data, doc )
 	End Sub
 End Class
Index: trunk/Include/Classes/System/Xml/XmlNode.ab
===================================================================
--- trunk/Include/Classes/System/Xml/XmlNode.ab	(revision 441)
+++ trunk/Include/Classes/System/Xml/XmlNode.ab	(revision 442)
@@ -1,4 +1,25 @@
 Namespace System
 Namespace Xml
+
+Enum XmlNodeType
+	None
+	Element
+	Attribute
+	Text
+	CDATA
+	EntifyReference
+	Entity
+	ProcessingInstruction
+	Comment
+	Document
+	DocumentType
+	DocumentFragment
+	Notation
+	Whitespace
+	SignificantWhitespace
+	EndElement
+	EndEntity
+	XmlDeclaration
+End Enum
 
 /*!
@@ -14,6 +35,220 @@
 	ownerDocument As XmlDocument
 	value As String
-
-	Function InnerXmlSupportedIndent( isIndent = False As Boolean, indent = 0 As Long ) As String
+	nodeType As XmlNodeType
+
+Public
+
+	/*!
+	@brief	コンストラクタ
+	*/
+	Sub XmlNode( nodeType As XmlNodeType, 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( nodeType As XmlNodeType, 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	名前またはインデックスによってアクセスできる属性のコレクションを表します。
+	*/
+	'Virtual Function Attributes() As XmlAttributeCollection
+	'	Return attributes
+	'End Function
+
+	/*!
+	@brief	子ノードリストを返します。
+	*/
+	Virtual Function ChildNodes() As XmlNodeList
+		Return childNodes
+	End Function
+
+	/*!
+	@brief	ノードの最初の子を取得します。
+	*/
+	Virtual Function FirstChild() As XmlNode
+		If childNodes.Count = 0 Then
+			' 子ノードが1つもないときはNothingを返す
+			Return Nothing
+		End If
+		Return childNodes[0]
+	End Function
+
+	/*!
+	@brief	子ノードが1つ以上あるかどうかを取得します。
+	*/
+	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 NodeType() As XmlNodeType
+		return nodeType
+	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	このノードの子ノードリストの末尾に指定したノードを追加する。
+	*/
+	Virtual Function AppendChild( newChild As XmlNode ) As XmlNode
+		childNodes.Add( newChild )
+		Return newChild
+	End Function
+
+	/*!
+	@brief	ノードを複製する。
+	*/
+	Virtual Function Clone() As XmlNode
+		' TODO: 実装
+	End Function
+
+	/*!
+	@brief	派生クラスでオーバーライドされた場合は、ノードの複製を作成する。
+	*/
+	Virtual Function CloneNode( deep As Boolean ) As XmlNode
+		' TODO: 実装
+	End Function
+
+	/*!
+	@brief	XmlNode のノードに対する Foreachスタイルの反復をサポートします。
+	*/
+	Virtual Function GetEnumerator() As IEnumerator
+		' TODO: 実装
+	End Function
+
+	/*!
+	@brief	指定したノードを指定した参照ノードの直後に挿入します。
+	@param	newChild 挿入するXmlNode。
+			refChild 参照ノードであるXmlNode。newNode は、refNode の後に配置されます。
+	@return	挿入されるノード。
+	*/
+	Virtual Function InsertAfter( newChild As XmlNode, refChild As XmlNode ) As XmlNode
+		' TODO: 実装
+	End Function
+
+	/*!
+	@brief	指定したノードを指定した参照ノードの直前に挿入します。
+	@param	newChild 挿入するXmlNode。
+			refChild 参照ノードであるXmlNode。newNode は、refNode の前に配置されます。
+	@return	挿入されるノード。
+	*/
+	Virtual Function InsertBefore( newChild As XmlNode, refChild As XmlNode ) As XmlNode
+		' TODO: 実装
+	End Function
+
+	/*!
+	@brief	このノードの子ノードのリストの先頭に、指定したノードを追加します。
+	@param	newChild 挿入するXmlNode。
+	@return	挿入されるノード。
+	*/
+	Virtual Function PrependChild( newChild As XmlNode ) As XmlNode
+		' TODO: 実装
+	End Function
+
+	/*!
+	@brief	現在のノードのすべての子ノードと属性の両方、またはそのいずれかを削除します。
+	*/
+	Virtual Sub RemoveAll()
+		' TODO: 実装
+	End Sub
+
+	/*!
+	@brief	現在のノードのすべての子ノードと属性の両方、またはそのいずれかを削除します。
+	@param	newChild 削除するXmlNode。
+	@return	削除されたノード。
+	*/
+	Virtual Function RemoveChild( oldChild As XmlNode ) As XmlNode
+		' TODO: 実装
+	End Function
+
+	/*!
+	@brief	子ノード oldChild を newChild ノードに置き換えます。
+	@param	newChild 新しいノード。
+			oldChild 置換されノード。
+	@return	置き換えられたノード。
+	*/
+	Virtual Function ReplaceChild( newChild As XmlNode, oldChild As XmlNode ) As XmlNode
+		' TODO: 実装
+	End Function
+
+
+Protected
+	Virtual Function InnerXmlSupportedIndent( isIndent = False As Boolean, indent = 0 As Long ) As String
 		Dim result = ""
 		If Not ActiveBasic.IsNothing( childNodes ) Then
@@ -26,5 +261,5 @@
 	End Function
 
-	Function OwnerXmlSupportedIndent( isIndent = False As Boolean, indent = 0 As Long ) As String
+	Virtual Function OwnerXmlSupportedIndent( isIndent = False As Boolean, indent = 0 As Long ) As String
 		Dim indentStr = ""
 		Dim crlfStr = ""
@@ -56,208 +291,4 @@
 		Return result
 	End Function
-
-Public
-
-	/*!
-	@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	名前またはインデックスによってアクセスできる属性のコレクションを表します。
-	*/
-	'Virtual Function Attributes() As XmlAttributeCollection
-	'	Return attributes
-	'End Function
-
-	/*!
-	@brief	子ノードリストを返します。
-	*/
-	Virtual Function ChildNodes() As XmlNodeList
-		Return childNodes
-	End Function
-
-	/*!
-	@brief	ノードの最初の子を取得します。
-	*/
-	Virtual Function FirstChild() As XmlNode
-		If childNodes.Count = 0 Then
-			' 子ノードが1つもないときはNothingを返す
-			Return Nothing
-		End If
-		Return childNodes[0]
-	End Function
-
-	/*!
-	@brief	子ノードが1つ以上あるかどうかを取得します。
-	*/
-	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	このノードの子ノードリストの末尾に指定したノードを追加する。
-	*/
-	Virtual Function AppendChild( newChild As XmlNode ) As XmlNode
-		childNodes.Add( newChild )
-		Return newChild
-	End Function
-
-	/*!
-	@brief	ノードを複製する。
-	*/
-	Virtual Function Clone() As XmlNode
-		' TODO: 実装
-	End Function
-
-	/*!
-	@brief	派生クラスでオーバーライドされた場合は、ノードの複製を作成する。
-	*/
-	Virtual Function CloneNode( deep As Boolean ) As XmlNode
-		' TODO: 実装
-	End Function
-
-	/*!
-	@brief	XmlNode のノードに対する Foreachスタイルの反復をサポートします。
-	*/
-	Virtual Function GetEnumerator() As IEnumerator
-		' TODO: 実装
-	End Function
-
-	/*!
-	@brief	指定したノードを指定した参照ノードの直後に挿入します。
-	@param	newChild 挿入するXmlNode。
-			refChild 参照ノードであるXmlNode。newNode は、refNode の後に配置されます。
-	@return	挿入されるノード。
-	*/
-	Virtual Function InsertAfter( newChild As XmlNode, refChild As XmlNode ) As XmlNode
-		' TODO: 実装
-	End Function
-
-	/*!
-	@brief	指定したノードを指定した参照ノードの直前に挿入します。
-	@param	newChild 挿入するXmlNode。
-			refChild 参照ノードであるXmlNode。newNode は、refNode の前に配置されます。
-	@return	挿入されるノード。
-	*/
-	Virtual Function InsertBefore( newChild As XmlNode, refChild As XmlNode ) As XmlNode
-		' TODO: 実装
-	End Function
-
-	/*!
-	@brief	このノードの子ノードのリストの先頭に、指定したノードを追加します。
-	@param	newChild 挿入するXmlNode。
-	@return	挿入されるノード。
-	*/
-	Virtual Function PrependChild( newChild As XmlNode ) As XmlNode
-		' TODO: 実装
-	End Function
-
-	/*!
-	@brief	現在のノードのすべての子ノードと属性の両方、またはそのいずれかを削除します。
-	*/
-	Virtual Sub RemoveAll()
-		' TODO: 実装
-	End Sub
-
-	/*!
-	@brief	現在のノードのすべての子ノードと属性の両方、またはそのいずれかを削除します。
-	@param	newChild 削除するXmlNode。
-	@return	削除されたノード。
-	*/
-	Virtual Function RemoveChild( oldChild As XmlNode ) As XmlNode
-		' TODO: 実装
-	End Function
-
-	/*!
-	@brief	子ノード oldChild を newChild ノードに置き換えます。
-	@param	newChild 新しいノード。
-			oldChild 置換されノード。
-	@return	置き換えられたノード。
-	*/
-	Virtual Function ReplaceChild( newChild As XmlNode, oldChild As XmlNode ) As XmlNode
-		' TODO: 実装
-	End Function
-
 End Class
 
Index: trunk/Include/Classes/System/Xml/XmlText.ab
===================================================================
--- trunk/Include/Classes/System/Xml/XmlText.ab	(revision 441)
+++ trunk/Include/Classes/System/Xml/XmlText.ab	(revision 442)
@@ -14,5 +14,5 @@
 	*/
 	Sub XmlText( strData As String, doc As XmlDocument )
-		XmlCharacterData( strData, doc )
+		XmlCharacterData( XmlNodeType.Text, strData, doc )
 	End Sub
 End Class
