# AEXML
**Repository Path**: mirrors_HubSpot/AEXML
## Basic Information
- **Project Name**: AEXML
- **Description**: Simple and lightweight XML parser written in Swift
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-24
- **Last Updated**: 2026-03-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AEXML
**Simple and lightweight XML parser written in Swift**
[](https://swift.org)
[](http://www.apple.com)
[](https://github.com/tadija/AEXML/blob/master/LICENSE)
[](https://cocoapods.org/pods/AEXML)
[](https://github.com/Carthage/Carthage)
[](https://github.com/apple/swift-package-manager)
> This is not a robust full featured XML parser, but rather simple,
lightweight and easy to use utility for casual XML handling.
## Index
- [Features](#features)
- [Usage](#usage)
- [Read XML](#read-xml)
- [Write XML](#write-xml)
- [Installation](#installation)
- [License](#license)
## Features
- **Read XML** data
- **Write XML** string
- Covered with [unit tests](https://github.com/tadija/AEXML/blob/master/Tests/AEXMLTests.swift)
- Covered with inline docs
## Usage
### Read XML
Let's say this is some XML string you picked up somewhere and made a variable `data: Data` from that.
```xml
Tinna
Rose
Caesar
Villy
Spot
Betty
Kika
```
This is how you can use AEXML for working with this data:
(for even more examples, look at the unit tests code included in project)
```swift
guard let
let xmlPath = Bundle.main.path(forResource: "example", ofType: "xml"),
let data = try? Data(contentsOf: URL(fileURLWithPath: xmlPath))
else { return }
do {
let xmlDoc = try AEXMLDocument(xml: data, options: options)
// prints the same XML structure as original
print(xmlDoc.xml)
// prints cats, dogs
for child in xmlDoc.root.children {
print(child.name)
}
// prints Optional("Tinna") (first element)
print(xmlDoc.root["cats"]["cat"].value)
// prints Tinna (first element)
print(xmlDoc.root["cats"]["cat"].string)
// prints Optional("Kika") (last element)
print(xmlDoc.root["dogs"]["dog"].last?.value)
// prints Betty (3rd element)
print(xmlDoc.root["dogs"].children[2].string)
// prints Tinna, Rose, Caesar
if let cats = xmlDoc.root["cats"]["cat"].all {
for cat in cats {
if let name = cat.value {
print(name)
}
}
}
// prints Villy, Spot
for dog in xmlDoc.root["dogs"]["dog"].all! {
if let color = dog.attributes["color"] {
if color == "white" {
print(dog.string)
}
}
}
// prints Tinna
if let cats = xmlDoc.root["cats"]["cat"].all(withValue: "Tinna") {
for cat in cats {
print(cat.string)
}
}
// prints Caesar
if let cats = xmlDoc.root["cats"]["cat"].all(withAttributes: ["breed" : "Domestic", "color" : "yellow"]) {
for cat in cats {
print(cat.string)
}
}
// prints 4
print(xmlDoc.root["cats"]["cat"].count)
// prints Siberian
print(xmlDoc.root["cats"]["cat"].attributes["breed"]!)
// prints Tinna
print(xmlDoc.root["cats"]["cat"].xmlCompact)
// prints Optional(AEXML.AEXMLError.elementNotFound)
print(xmlDoc["NotExistingElement"].error)
}
catch {
print("\(error)")
}
```
### Write XML
Let's say this is some SOAP XML request you need to generate.
Well, you could just build ordinary string for that?
```xml
234
AAPL
```
Yes, but, you can also do it in a more structured and elegant way with AEXML:
```swift
// create XML Document
let soapRequest = AEXMLDocument()
let attributes = ["xmlns:xsi" : "http://www.w3.org/2001/XMLSchema-instance", "xmlns:xsd" : "http://www.w3.org/2001/XMLSchema"]
let envelope = soapRequest.addChild(name: "soap:Envelope", attributes: attributes)
let header = envelope.addChild(name: "soap:Header")
let body = envelope.addChild(name: "soap:Body")
header.addChild(name: "m:Trans", value: "234", attributes: ["xmlns:m" : "http://www.w3schools.com/transaction/", "soap:mustUnderstand" : "1"])
let getStockPrice = body.addChild(name: "m:GetStockPrice")
getStockPrice.addChild(name: "m:StockName", value: "AAPL")
// prints the same XML structure as original
print(soapRequest.xml)
```
## Installation
- [Swift Package Manager](https://swift.org/package-manager/):
```
.Package(url: "https://github.com/tadija/AEXML.git", majorVersion: 4)
```
- [Carthage](https://github.com/Carthage/Carthage):
```ogdl
github "tadija/AEXML"
```
- [CocoaPods](http://cocoapods.org/):
```ruby
pod 'AEXML'
```
## License
AEXML is released under the MIT license. See [LICENSE](LICENSE) for details.