Swifty XML pull parser
let xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><foo>Hello World!</foo>"
if let parser = XMLPullParser(string: xml) {
do {
parsing: while true {
switch try parser.next() {
case .startDocument:
print("start document")
case .startElement(let name, _, _):
print("start element: \(name)")
case .characters(let text):
print("text: \(text)")
case .endElement(let name, _):
print("end element: \(name)")
case .endDocument:
print("end document")
break parsing
}
}
} catch let error {
print("error: \(error)")
}
}
Thanks to swift's pattern matching feature, you can easily handle start of elements like this:
let event = try parser.next()
switch event {
case .startElement("foo", _, _):
// handle start of <foo>
print("foo: \(event)")
case .startElement("bar", _, _):
// handle start of <bar>
print("bar: \(event)")
case .startElement("baz", "http://example.com/ns/1.0"?, let element):
// handle start of <baz>, whose namespace URI is http://example.com/ns/1.0
// note: you must set parser.shouldProcessNamespaces true to handle namespaces
// you can get attributes from XmlElement object
print(element.attributes["xyz"])
case .startElement(_, _, _):
// handle start of other elements
print("other: \(event)")
default:
break
}
- iOS 8.0+
- tvOS 9.0+
- Swift 5.1+
XMLPullitic is available through CocoaPods. To install it, simply add the following lines to your Podfile:
use_frameworks!
pod "XMLPullitic", '~> 3.0'
XMLPullitic is available through Carthage. To install it, simply add the following line to your Cartfile:
github "hironytic/XMLPullitic" ~> 3.0
Hironori Ichimiya, [email protected]
XMLPullitic is available under the MIT license. See the LICENSE file for more info.