Namespace System Namespace Xml /*! @brief XMLドキュメント内の単一のノードを表す。 */ 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 + "" + crlfStr 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 です。プリフィックスがない場合、このプロパティは 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 TypeDef XmlNodeList = System.Collections.Generic.List End Namespace End Namespace