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

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

XmlNodeType列挙型を実装

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