| [402] | 1 | Namespace System | 
|---|
|  | 2 | Namespace Xml | 
|---|
|  | 3 |  | 
|---|
| [442] | 4 | Enum XmlNodeType | 
|---|
|  | 5 | None | 
|---|
|  | 6 | Element | 
|---|
|  | 7 | Attribute | 
|---|
|  | 8 | Text | 
|---|
|  | 9 | CDATA | 
|---|
|  | 10 | EntifyReference | 
|---|
|  | 11 | Entity | 
|---|
|  | 12 | ProcessingInstruction | 
|---|
|  | 13 | Comment | 
|---|
|  | 14 | Document | 
|---|
|  | 15 | DocumentType | 
|---|
|  | 16 | DocumentFragment | 
|---|
|  | 17 | Notation | 
|---|
|  | 18 | Whitespace | 
|---|
|  | 19 | SignificantWhitespace | 
|---|
|  | 20 | EndElement | 
|---|
|  | 21 | EndEntity | 
|---|
|  | 22 | XmlDeclaration | 
|---|
|  | 23 | End Enum | 
|---|
|  | 24 |  | 
|---|
| [402] | 25 | /*! | 
|---|
|  | 26 | @brief  XMLドキュメント内の単一のノードを表す。 | 
|---|
|  | 27 | */ | 
|---|
|  | 28 | Class XmlNode | 
|---|
|  | 29 |  | 
|---|
| [443] | 30 | attributes As XmlAttributeCollection | 
|---|
| [402] | 31 | childNodes As XmlNodeList | 
|---|
| [424] | 32 | prefix As String | 
|---|
|  | 33 | localName As String | 
|---|
|  | 34 | namespaceURI As String | 
|---|
|  | 35 | ownerDocument As XmlDocument | 
|---|
|  | 36 | value As String | 
|---|
| [442] | 37 | nodeType As XmlNodeType | 
|---|
| [402] | 38 |  | 
|---|
| [424] | 39 | Public | 
|---|
|  | 40 |  | 
|---|
| [402] | 41 | /*! | 
|---|
| [424] | 42 | @brief  コンストラクタ | 
|---|
|  | 43 | */ | 
|---|
| [442] | 44 | Sub XmlNode( nodeType As XmlNodeType, prefix As String, localName As String, namespaceURI As String, doc As XmlDocument ) | 
|---|
| [424] | 45 | This.prefix = prefix | 
|---|
|  | 46 | This.localName = localName | 
|---|
|  | 47 | This.namespaceURI = namespaceURI | 
|---|
|  | 48 | This.ownerDocument = doc | 
|---|
|  | 49 | This.value = Nothing | 
|---|
|  | 50 |  | 
|---|
| [443] | 51 | attributes = New XmlAttributeCollection | 
|---|
| [424] | 52 | childNodes = New XmlNodeList() | 
|---|
|  | 53 | End Sub | 
|---|
|  | 54 |  | 
|---|
|  | 55 | /*! | 
|---|
|  | 56 | @brief  コンストラクタ | 
|---|
|  | 57 | */ | 
|---|
| [442] | 58 | Sub XmlNode( nodeType As XmlNodeType, data As String, doc As XmlDocument ) | 
|---|
| [424] | 59 | This.prefix = Nothing | 
|---|
|  | 60 | This.localName = Nothing | 
|---|
|  | 61 | This.namespaceURI = Nothing | 
|---|
|  | 62 | This.ownerDocument = doc | 
|---|
|  | 63 | This.value = data | 
|---|
|  | 64 |  | 
|---|
| [443] | 65 | attributes = New XmlAttributeCollection | 
|---|
| [424] | 66 | childNodes = Nothing | 
|---|
|  | 67 | End Sub | 
|---|
|  | 68 |  | 
|---|
|  | 69 |  | 
|---|
|  | 70 | '---------------------------------------------------------------- | 
|---|
|  | 71 | ' パブリック プロパティ | 
|---|
|  | 72 | '---------------------------------------------------------------- | 
|---|
|  | 73 |  | 
|---|
|  | 74 | /*! | 
|---|
| [402] | 75 | @brief  名前またはインデックスによってアクセスできる属性のコレクションを表します。 | 
|---|
|  | 76 | */ | 
|---|
| [443] | 77 | Virtual Function Attributes() As XmlAttributeCollection | 
|---|
|  | 78 | Return attributes | 
|---|
|  | 79 | End Function | 
|---|
| [402] | 80 |  | 
|---|
|  | 81 | /*! | 
|---|
|  | 82 | @brief  子ノードリストを返します。 | 
|---|
|  | 83 | */ | 
|---|
| [424] | 84 | Virtual Function ChildNodes() As XmlNodeList | 
|---|
| [402] | 85 | Return childNodes | 
|---|
|  | 86 | End Function | 
|---|
|  | 87 |  | 
|---|
|  | 88 | /*! | 
|---|
|  | 89 | @brief  ノードの最初の子を取得します。 | 
|---|
|  | 90 | */ | 
|---|
| [424] | 91 | Virtual Function FirstChild() As XmlNode | 
|---|
| [402] | 92 | If childNodes.Count = 0 Then | 
|---|
|  | 93 | ' 子ノードが1つもないときはNothingを返す | 
|---|
|  | 94 | Return Nothing | 
|---|
|  | 95 | End If | 
|---|
|  | 96 | Return childNodes[0] | 
|---|
|  | 97 | End Function | 
|---|
|  | 98 |  | 
|---|
|  | 99 | /*! | 
|---|
|  | 100 | @brief  子ノードが1つ以上あるかどうかを取得します。 | 
|---|
|  | 101 | */ | 
|---|
| [424] | 102 | Virtual Function HasChildNodes() As Boolean | 
|---|
| [402] | 103 | Return Not ( childNodes.Count = 0 ) | 
|---|
|  | 104 | End Function | 
|---|
|  | 105 |  | 
|---|
|  | 106 | /*! | 
|---|
| [424] | 107 | @brief  このノードの子ノードだけを表すマークアップを取得または設定します。 | 
|---|
|  | 108 | */ | 
|---|
|  | 109 | Virtual Function InnerXml() As String | 
|---|
|  | 110 | Return InnerXmlSupportedIndent() | 
|---|
|  | 111 | End Function | 
|---|
|  | 112 |  | 
|---|
|  | 113 | /*! | 
|---|
|  | 114 | @brief  ノードのローカル名を取得します。 | 
|---|
|  | 115 | @return ノードのローカル名。 | 
|---|
|  | 116 | */ | 
|---|
|  | 117 | Virtual Function LocalName() As String | 
|---|
|  | 118 | return localName | 
|---|
|  | 119 | End Function | 
|---|
|  | 120 |  | 
|---|
|  | 121 | /*! | 
|---|
|  | 122 | @brief  このノードの名前空間 URI を取得します。 | 
|---|
|  | 123 | @return このノードの名前空間 URI。 | 
|---|
|  | 124 | */ | 
|---|
|  | 125 | Virtual Function NamespaceURI() As String | 
|---|
|  | 126 | return NamespaceURI | 
|---|
|  | 127 | End Function | 
|---|
|  | 128 |  | 
|---|
|  | 129 | /*! | 
|---|
| [442] | 130 | @brief  このノードのノードタイプを取得します。 | 
|---|
|  | 131 | @return このノードのノードタイプ。 | 
|---|
|  | 132 | */ | 
|---|
|  | 133 | Virtual Function NodeType() As XmlNodeType | 
|---|
|  | 134 | return nodeType | 
|---|
|  | 135 | End Function | 
|---|
|  | 136 |  | 
|---|
|  | 137 | /*! | 
|---|
| [424] | 138 | @brief  このノードとそのすべての子ノードを表すマークアップを取得します。 | 
|---|
|  | 139 | @return このノードとそのすべての子ノードを格納しているマークアップ。 | 
|---|
|  | 140 | */ | 
|---|
|  | 141 | Virtual Function OuterXml() As String | 
|---|
|  | 142 | Return OwnerXmlSupportedIndent() | 
|---|
|  | 143 | End Function | 
|---|
|  | 144 |  | 
|---|
|  | 145 | /*! | 
|---|
|  | 146 | @brief  このノードが属する XmlDocument を取得します。 | 
|---|
|  | 147 | @return このノードが属する XmlDocument。 | 
|---|
|  | 148 | */ | 
|---|
|  | 149 | Virtual Function OwnerDocument() As XmlDocument | 
|---|
|  | 150 | Return ownerDocument | 
|---|
|  | 151 | End Function | 
|---|
|  | 152 |  | 
|---|
|  | 153 | /*! | 
|---|
|  | 154 | @brief  このノードの名前空間プリフィックスを取得または設定します。 | 
|---|
|  | 155 | @return このノードの名前空間プリフィックス。たとえば、プリフィックスは要素 <bk:book> の bk です。プリフィックスがない場合、このプロパティは String.Empty を返します。 | 
|---|
|  | 156 | */ | 
|---|
|  | 157 | Virtual Function Prefix() As String | 
|---|
|  | 158 | return prefix | 
|---|
|  | 159 | End Function | 
|---|
|  | 160 |  | 
|---|
| [443] | 161 | /*! | 
|---|
|  | 162 | @brief  このノードの値を取得します。 | 
|---|
|  | 163 | @return このノードの値。 | 
|---|
|  | 164 | */ | 
|---|
|  | 165 | Virtual Function Value() As String | 
|---|
|  | 166 | return value | 
|---|
|  | 167 | End Function | 
|---|
| [424] | 168 |  | 
|---|
| [443] | 169 | /*! | 
|---|
|  | 170 | @brief  このノードの値を設定します。 | 
|---|
|  | 171 | @param  value 値文字列。 | 
|---|
|  | 172 | */ | 
|---|
|  | 173 | Virtual Sub Value( value As String ) | 
|---|
|  | 174 | This.value = value | 
|---|
|  | 175 | End Sub | 
|---|
| [424] | 176 |  | 
|---|
| [443] | 177 |  | 
|---|
| [424] | 178 | '---------------------------------------------------------------- | 
|---|
|  | 179 | ' パブリック メソッド | 
|---|
|  | 180 | '---------------------------------------------------------------- | 
|---|
|  | 181 |  | 
|---|
|  | 182 | /*! | 
|---|
| [402] | 183 | @brief  このノードの子ノードリストの末尾に指定したノードを追加する。 | 
|---|
|  | 184 | */ | 
|---|
| [424] | 185 | Virtual Function AppendChild( newChild As XmlNode ) As XmlNode | 
|---|
|  | 186 | childNodes.Add( newChild ) | 
|---|
|  | 187 | Return newChild | 
|---|
| [402] | 188 | End Function | 
|---|
|  | 189 |  | 
|---|
|  | 190 | /*! | 
|---|
|  | 191 | @brief  ノードを複製する。 | 
|---|
|  | 192 | */ | 
|---|
| [424] | 193 | Virtual Function Clone() As XmlNode | 
|---|
| [402] | 194 | ' TODO: 実装 | 
|---|
|  | 195 | End Function | 
|---|
|  | 196 |  | 
|---|
|  | 197 | /*! | 
|---|
|  | 198 | @brief  派生クラスでオーバーライドされた場合は、ノードの複製を作成する。 | 
|---|
|  | 199 | */ | 
|---|
| [424] | 200 | Virtual Function CloneNode( deep As Boolean ) As XmlNode | 
|---|
| [402] | 201 | ' TODO: 実装 | 
|---|
|  | 202 | End Function | 
|---|
|  | 203 |  | 
|---|
|  | 204 | /*! | 
|---|
|  | 205 | @brief  XmlNode のノードに対する Foreachスタイルの反復をサポートします。 | 
|---|
|  | 206 | */ | 
|---|
| [424] | 207 | Virtual Function GetEnumerator() As IEnumerator | 
|---|
| [402] | 208 | ' TODO: 実装 | 
|---|
|  | 209 | End Function | 
|---|
|  | 210 |  | 
|---|
|  | 211 | /*! | 
|---|
|  | 212 | @brief  指定したノードを指定した参照ノードの直後に挿入します。 | 
|---|
|  | 213 | @param  newChild 挿入するXmlNode。 | 
|---|
|  | 214 | refChild 参照ノードであるXmlNode。newNode は、refNode の後に配置されます。 | 
|---|
|  | 215 | @return 挿入されるノード。 | 
|---|
|  | 216 | */ | 
|---|
| [424] | 217 | Virtual Function InsertAfter( newChild As XmlNode, refChild As XmlNode ) As XmlNode | 
|---|
| [402] | 218 | ' TODO: 実装 | 
|---|
|  | 219 | End Function | 
|---|
|  | 220 |  | 
|---|
|  | 221 | /*! | 
|---|
|  | 222 | @brief  指定したノードを指定した参照ノードの直前に挿入します。 | 
|---|
|  | 223 | @param  newChild 挿入するXmlNode。 | 
|---|
|  | 224 | refChild 参照ノードであるXmlNode。newNode は、refNode の前に配置されます。 | 
|---|
|  | 225 | @return 挿入されるノード。 | 
|---|
|  | 226 | */ | 
|---|
| [424] | 227 | Virtual Function InsertBefore( newChild As XmlNode, refChild As XmlNode ) As XmlNode | 
|---|
| [402] | 228 | ' TODO: 実装 | 
|---|
|  | 229 | End Function | 
|---|
|  | 230 |  | 
|---|
|  | 231 | /*! | 
|---|
|  | 232 | @brief  このノードの子ノードのリストの先頭に、指定したノードを追加します。 | 
|---|
|  | 233 | @param  newChild 挿入するXmlNode。 | 
|---|
|  | 234 | @return 挿入されるノード。 | 
|---|
|  | 235 | */ | 
|---|
| [424] | 236 | Virtual Function PrependChild( newChild As XmlNode ) As XmlNode | 
|---|
| [402] | 237 | ' TODO: 実装 | 
|---|
|  | 238 | End Function | 
|---|
|  | 239 |  | 
|---|
|  | 240 | /*! | 
|---|
|  | 241 | @brief  現在のノードのすべての子ノードと属性の両方、またはそのいずれかを削除します。 | 
|---|
|  | 242 | */ | 
|---|
| [424] | 243 | Virtual Sub RemoveAll() | 
|---|
| [402] | 244 | ' TODO: 実装 | 
|---|
|  | 245 | End Sub | 
|---|
|  | 246 |  | 
|---|
|  | 247 | /*! | 
|---|
|  | 248 | @brief  現在のノードのすべての子ノードと属性の両方、またはそのいずれかを削除します。 | 
|---|
|  | 249 | @param  newChild 削除するXmlNode。 | 
|---|
|  | 250 | @return 削除されたノード。 | 
|---|
|  | 251 | */ | 
|---|
| [424] | 252 | Virtual Function RemoveChild( oldChild As XmlNode ) As XmlNode | 
|---|
| [402] | 253 | ' TODO: 実装 | 
|---|
|  | 254 | End Function | 
|---|
|  | 255 |  | 
|---|
|  | 256 | /*! | 
|---|
|  | 257 | @brief  子ノード oldChild を newChild ノードに置き換えます。 | 
|---|
|  | 258 | @param  newChild 新しいノード。 | 
|---|
|  | 259 | oldChild 置換されノード。 | 
|---|
|  | 260 | @return 置き換えられたノード。 | 
|---|
|  | 261 | */ | 
|---|
| [424] | 262 | Virtual Function ReplaceChild( newChild As XmlNode, oldChild As XmlNode ) As XmlNode | 
|---|
| [402] | 263 | ' TODO: 実装 | 
|---|
|  | 264 | End Function | 
|---|
|  | 265 |  | 
|---|
| [442] | 266 |  | 
|---|
|  | 267 | Protected | 
|---|
| [443] | 268 |  | 
|---|
|  | 269 | Function GetAttributesStr() As String | 
|---|
|  | 270 | If attributes.Count = 0 Then | 
|---|
|  | 271 | ' 属性が1つもない場合 | 
|---|
|  | 272 | Return "" | 
|---|
|  | 273 | End If | 
|---|
|  | 274 |  | 
|---|
|  | 275 | Dim result = "" | 
|---|
|  | 276 | Foreach attribute In attributes | 
|---|
|  | 277 | result += " " + attribute.OuterXml | 
|---|
|  | 278 | Next | 
|---|
|  | 279 | Return result | 
|---|
|  | 280 | End Function | 
|---|
|  | 281 |  | 
|---|
| [442] | 282 | Virtual Function InnerXmlSupportedIndent( isIndent = False As Boolean, indent = 0 As Long ) As String | 
|---|
|  | 283 | Dim result = "" | 
|---|
|  | 284 | If Not ActiveBasic.IsNothing( childNodes ) Then | 
|---|
|  | 285 | ' 子ノード | 
|---|
|  | 286 | Foreach childNode In childNodes | 
|---|
|  | 287 | result += childNode.OwnerXmlSupportedIndent( isIndent, indent ) | 
|---|
|  | 288 | Next | 
|---|
|  | 289 | End If | 
|---|
|  | 290 | Return result | 
|---|
|  | 291 | End Function | 
|---|
|  | 292 |  | 
|---|
|  | 293 | Virtual Function OwnerXmlSupportedIndent( isIndent = False As Boolean, indent = 0 As Long ) As String | 
|---|
|  | 294 | Dim indentStr = "" | 
|---|
|  | 295 | Dim crlfStr = "" | 
|---|
|  | 296 | If isIndent Then | 
|---|
|  | 297 | ' インデントをサポートする場合 | 
|---|
|  | 298 | Dim i As Long | 
|---|
|  | 299 | For i=0 To ELM(indent) | 
|---|
|  | 300 | indentStr += Ex"\t" | 
|---|
|  | 301 | Next | 
|---|
|  | 302 |  | 
|---|
|  | 303 | crlfStr = Ex"\r\n" | 
|---|
|  | 304 | End If | 
|---|
|  | 305 |  | 
|---|
|  | 306 | If childNodes.Count = 0 Then | 
|---|
| [443] | 307 | Return indentStr + "<" + localName + This.GetAttributesStr() + " />" + crlfStr | 
|---|
| [442] | 308 | End If | 
|---|
|  | 309 |  | 
|---|
|  | 310 | Dim result = "" | 
|---|
|  | 311 |  | 
|---|
|  | 312 | ' 開始タグ | 
|---|
| [443] | 313 | result += indentStr + "<" + localName + This.GetAttributesStr() + ">" + crlfStr | 
|---|
| [442] | 314 |  | 
|---|
|  | 315 | ' 子ノードリスト | 
|---|
|  | 316 | result += InnerXmlSupportedIndent( isIndent, indent + 1 ) | 
|---|
|  | 317 |  | 
|---|
|  | 318 | ' 終了タグ | 
|---|
|  | 319 | result += indentStr + "</" + localName + ">" + crlfStr | 
|---|
|  | 320 |  | 
|---|
|  | 321 | Return result | 
|---|
|  | 322 | End Function | 
|---|
| [402] | 323 | End Class | 
|---|
|  | 324 |  | 
|---|
| [424] | 325 | TypeDef XmlNodeList = System.Collections.Generic.List<XmlNode> | 
|---|
| [402] | 326 |  | 
|---|
| [424] | 327 |  | 
|---|
| [402] | 328 | End Namespace | 
|---|
|  | 329 | End Namespace | 
|---|