source: trunk/Include/Classes/System/Xml/XmlNode.ab@ 424

Last change on this file since 424 was 424, checked in by dai, 16 years ago

System.Xml関連のクラスを仮実装してみた(まだ満足な機能レベルではない…)。

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