-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathXmlNode.bas
More file actions
129 lines (120 loc) · 2.63 KB
/
XmlNode.bas
File metadata and controls
129 lines (120 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
B4J=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=7.8
@EndOfDesignText@
Sub Class_Globals
Public Name As String
Public Children As List
Public Attributes As Map
Public Closed As Boolean
Public Parent As XmlNode
Public Text As String
End Sub
'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize
Children.Initialize
Attributes.Initialize
End Sub
Sub Get(key As String) As List
Dim list1 As List
list1.Initialize
For Each node As XmlNode In Children
If node.Name=key Then
list1.Add(node)
End If
Next
Return list1
End Sub
Sub Contains(key As String) As Boolean
Dim list1 As List
list1.Initialize
For Each node As XmlNode In Children
If node.Name=key Then
Return True
End If
Next
Return False
End Sub
Public Sub replaceChildren(nodeName As String,nodes As List)
For i=0 To Children.Size-1
Dim node As XmlNode=Children.Get(i)
If node.Name=nodeName Then
If nodes.Size<>0 Then
Children.Set(i,nodes.Get(0))
nodes.RemoveAt(0)
Else
Return
End If
End If
Next
End Sub
Public Sub getinnerXML As String
If Children.Size=0 Then
Return ""
End If
Dim xml As String=XMLUtils.asStringWithoutXMLHead(Me)
Try
Dim matcher As Matcher
matcher=Regex.Matcher2("(<.*?>).*(</.*?>)",32,xml)
Dim parts As List
parts.Initialize
If matcher.Find Then
xml=xml.SubString2(0,matcher.GetStart(2))
xml=xml.SubString2(matcher.GetEnd(1),xml.Length)
End If
Catch
Log(LastException)
End Try
Return xml
End Sub
Public Sub setinnerXML(xml As String)
Dim parser As XmlParser
parser.Initialize
Dim node As XmlNode
Dim sb As StringBuilder
sb.Initialize
sb.Append("<").Append(Name).Append(">")
sb.append(xml)
sb.Append("</").Append(Name).Append(">")
node=parser.Parse(sb.ToString)
'Log("-------")
'Log(sb.ToString)
'Log(node.Name)
'Log(Name)
Dim child As XmlNode=node.Children.Get(0)
If child.Name=Name Then
node=node.Children.Get(0)
End If
Children=node.Children
End Sub
Public Sub setinnerText(s As String)
'If XMLUtils.XmlNodeContainsOnlyText(Me) Then
' Children.Clear
' s=XMLUtils.DiscloseTagText(s,False)
' Children.Add(CreateTextNode(s))
' Return
'End If
Try
setinnerXML(XMLUtils.TextToXML(s))
Catch
Log(LastException)
Children.Clear
Children.Add(CreateTextNode(s))
End Try
End Sub
Sub CreateTextNode (s As String) As XmlNode
Dim xe As XmlNode
xe.Initialize
xe.Children.Initialize
xe.Name = "text"
xe.Text=s
Return xe
End Sub
Public Sub getinnerText As String
'If XMLUtils.XmlNodeContainsOnlyText(Me) Then
' Return XMLUtils.EncloseTagText(XMLUtils.XmlNodeText(Me),False)
'End If
Return XMLUtils.XMLToText(getinnerXML)
End Sub