@@ -56,54 +56,95 @@ pod "SwiftyXMLParser", :git => 'https://github.com/yahoojapan/SwiftyXMLParser.gi
56
56
# Example
57
57
58
58
``` swift
59
- let string = " <ResultSet><Result><Hit index=\" 1\" ><Name>Item1</Name></Hit><Hit index=\" 2\" ><Name>Item2</Name></Hit></Result></ResultSet>"
60
-
61
- // parse xml document
62
- xml = try ! XML.parse (string)
63
-
64
- // access xml element
65
- let accessor = xml[" ResultSet" ]
66
-
67
- // access XML Text
68
- let text = xml[" ResultSet" , " Result" , " Hit" , 0 , " Name" ].text {
69
- print (" exsists path & text in XML Element" )
70
- }
71
-
72
- // access XML Attribute
73
- let index = xml[" ResultSet" , " Result" , " Hit" ].attributes ? [" index" ] {
74
- print (" exsists path & an attribute in XML Element" )
75
- }
76
-
77
- // enumerate child Elements in the parent Element
78
- for hit in xml[" ResultSet" , " Result" , " Hit" ] {
79
- print (" enumarate existing XML Elements" )
80
- }
81
-
82
- // check if the XML path is wrong
83
- if case .Failure (let error) = xml[" ResultSet" , " Result" , " TypoKey" ] {
84
- print (error)
85
- }
59
+ import SwiftyXMLParser
60
+
61
+ let str = """
62
+ <ResultSet>
63
+ <Result>
64
+ <Hit index=\" 1\" >
65
+ <Name>Item1</Name>
66
+ </Hit>
67
+ <Hit index=\" 2\" >
68
+ <Name>Item2</Name>
69
+ </Hit>
70
+ </Result>
71
+ </ResultSet>
72
+ """
73
+
74
+ // parse xml document
75
+ let xml = try ! XML.parse (str)
76
+
77
+ // access xml element
78
+ let accessor = xml[" ResultSet" ]
79
+
80
+ // access XML Text
81
+
82
+ if let text = xml[" ResultSet" , " Result" , " Hit" , 0 , " Name" ].text {
83
+ print (text)
84
+ }
85
+
86
+ if let text = xml.ResultSet.Result.Hit[0 ].Name.text {
87
+ print (text)
88
+ }
89
+
90
+ // access XML Attribute
91
+ if let index = xml[" ResultSet" , " Result" , " Hit" ].attributes[" index" ] {
92
+ print (index)
93
+ }
94
+
95
+ // enumerate child Elements in the parent Element
96
+ for hit in xml[" ResultSet" , " Result" , " Hit" ] {
97
+ print (hit)
98
+ }
99
+
100
+ // check if the XML path is wrong
101
+ if case .failure (let error) = xml[" ResultSet" , " Result" , " TypoKey" ] {
102
+ print (error)
103
+ }
86
104
```
87
105
88
106
# Usage
89
107
### 1. Parse XML
90
108
+ from String
91
109
``` swift
92
- let string = " <ResultSet><Result><Hit index=\" 1\" ><Name>Item1</Name></Hit><Hit index=\" 2\" ><Name>Item2</Name></Hit></Result></ResultSet>"
110
+ let str = """
111
+ <ResultSet>
112
+ <Result>
113
+ <Hit index=\" 1\" >
114
+ <Name>Item1</Name>
115
+ </Hit>
116
+ <Hit index=\" 2\" >
117
+ <Name>Item2</Name>
118
+ </Hit>
119
+ </Result>
120
+ </ResultSet>
121
+ """
93
122
94
123
xml = try ! XML.parse (string) // -> XML.Accessor
95
124
```
96
125
+ from NSData
97
126
``` swift
98
- let string = " <ResultSet><Result><Hit index=\" 1\" ><Name>Item1</Name></Hit><Hit index=\" 2\" ><Name>Item2</Name></Hit></Result></ResultSet>"
127
+ let str = """
128
+ <ResultSet>
129
+ <Result>
130
+ <Hit index=\" 1\" >
131
+ <Name>Item1</Name>
132
+ </Hit>
133
+ <Hit index=\" 2\" >
134
+ <Name>Item2</Name>
135
+ </Hit>
136
+ </Result>
137
+ </ResultSet>
138
+ """
139
+
99
140
let data = string.dataUsingEncoding (NSUTF8StringEncoding)
100
141
101
142
xml = XML.parse (data) // -> XML.Accessor
102
143
```
103
144
104
145
### 2. Access child Elements
105
146
``` swift
106
- let element = xml[ " ResultSet" ] // -> XML.Accessor
147
+ let element = xml. ResultSet // -> XML.Accessor
107
148
```
108
149
109
150
### 3. Access grandchild Elements
@@ -120,20 +161,24 @@ let element = xml[path] // -> <Result><Hit index=\"1\"><Name>Item1</Name></Hit><
120
161
``` swift
121
162
let element = xml[" ResultSet" , " Result" ] // -> <Result><Hit index=\"1\"><Name>Item1</Name></Hit><Hit index=\"2\"><Name>Item2</Name></Hit></Result>
122
163
```
164
+ + with @dynamicMemberLookup
165
+ ``` swift
166
+ let element = xml.ResultSet .Result // -> <Result><Hit index=\"1\"><Name>Item1</Name></Hit><Hit index=\"2\"><Name>Item2</Name></Hit></Result>
167
+ ```
123
168
### 4. Access specific grandchild Element
124
169
``` swift
125
- let element = xml[ " ResultSet" , " Result" , " Hit" , 1 ] // -> <Hit index=\"2\"><Name>Item2</Name></Hit>
170
+ let element = xml. ResultSet . Result . Hit [ 1 ] // -> <Hit index=\"2\"><Name>Item2</Name></Hit>
126
171
```
127
172
### 5. Access attribute in Element
128
173
``` swift
129
- if let attributeValue = xml[ " ResultSet" , " Result" , " Hit" , 1 ].attributes? [" index" ] {
174
+ if let attributeValue = xml. ResultSet. Result. Hit[ 1 ].attributes? [" index" ] {
130
175
print (attributeValue) // -> 2
131
176
}
132
177
```
133
178
### 6. Access text in Element
134
179
+ with optional binding
135
180
``` swift
136
- if let text = xml[ " ResultSet" , " Result" , " Hit" , 1 , " Name " ] .text {
181
+ if let text = xml. ResultSet. Result. Hit[ 1 ].Name .text {
137
182
print (text) // -> Item2
138
183
}
139
184
```
@@ -143,15 +188,15 @@ struct Entity {
143
188
var name = " "
144
189
}
145
190
let entity = Entity ()
146
- entity.name ?= xml[ " ResultSet" , " Result" , " Hit" , 1 , " Name " ] .text // assign if it has text
191
+ entity.name ?= xml. ResultSet . Result . Hit [ 1 ]. Name .text // assign if it has text
147
192
```
148
193
+ convert Int and assign
149
194
``` swift
150
195
struct Entity {
151
196
var name: Int = 0
152
197
}
153
198
let entity = Entity ()
154
- entity.name ?= xml[ " ResultSet" , " Result" , " Hit" , 1 , " Name " ] .int // assign if it has Int
199
+ entity.name ?= xml. ResultSet . Result . Hit [ 1 ]. Name .int // assign if it has Int
155
200
```
156
201
and there are other syntax sugers, bool, url and double.
157
202
+ assign text into Array
@@ -160,23 +205,23 @@ struct Entity {
160
205
var names = [String ]()
161
206
}
162
207
let entity = Entity ()
163
- entity.names ?<< xml[ " ResultSet" , " Result" , " Hit" , 1 , " Name " ] .text // assign if it has text
208
+ entity.names ?<< xml. ResultSet . Result . Hit [ 1 ]. Name .text // assign if it has text
164
209
```
165
210
### Check error
166
211
``` swift
167
- print (xml[ " ResultSet" , " Result" , " TypoKey" ] ) // -> "TypoKey not found."
212
+ print (xml. ResultSet . Result . TypoKey ) // -> "TypoKey not found."
168
213
```
169
214
170
215
### Access as SequenceType
171
216
+ for-in
172
217
``` swift
173
- for element in xml[ " ResultSet" , " Result" , " Hit" ] {
218
+ for element in xml. ResultSet. Result. Hit {
174
219
print (element.text )
175
220
}
176
221
```
177
222
+ map
178
223
``` swift
179
- xml[ " ResultSet" , " Result" , " Hit" ] .map { $0 [ " Name" ] .text }
224
+ xml. ResultSet . Result . Hit .map { $0 . Name .text }
180
225
```
181
226
182
227
## Work with Alamofire
@@ -190,7 +235,7 @@ Alamofire.request(.GET, "https://itunes.apple.com/us/rss/topgrossingapplications
190
235
.responseData { response in
191
236
if let data = response.data {
192
237
let xml = XML.parse (data)
193
- print (xml[ " feed" , " entry" , 0 , " title " ] .text ) // outputs the top title of iTunes app raning.
238
+ print (xml. feed . entry [ 0 ]. title .text ) // outputs the top title of iTunes app raning.
194
239
}
195
240
}
196
241
```
0 commit comments