GitPedia

SwiftyXML

The most swifty way to deal with XML data in swift 5.

From chenyunguiMilook·Updated January 27, 2026·View on GitHub·

**SwiftyXML** is a The most swifty way to deal with XML data in swift 5. The project is written primarily in Swift, distributed under the MIT License license, first published in 2016. Key topics include: carthage, cocoapod, swifty, xml, xml-data.

Carthage compatible

SwiftyXML

Platform

SwiftyXML use most swifty way to deal with XML data.

Features

  • Infinity subscript
  • dynamicMemberLookup Support (use $ started string to subscript attribute)
  • Optional | Non-optional value access
  • Directly access Enum type value (enums extends from RawRepresentable)
  • Directly for loop in XML children nodes
  • Accurate error throwing
  • XML construct, formatting
  • Single source file

Sample XML:

xml
<catalog> <product description="Cardigan Sweater" product_image="cardigan.jpg" > <catalog_item gender="Men's" > <item_number>QWZ5671</item_number> <price>39.95</price> <size description="Medium" > <color_swatch image="red_cardigan.jpg" >Red</color_swatch> <color_swatch image="burgundy_cardigan.jpg" >Burgundy</color_swatch> </size> <size description="Large" > <color_swatch image="red_cardigan.jpg" >Red</color_swatch> <color_swatch image="burgundy_cardigan.jpg" >Burgundy</color_swatch> </size> </catalog_item> <catalog_item gender="Women's" > <item_number>RRX9856</item_number> <price>42.50</price> <size description="Small" > <color_swatch image="red_cardigan.jpg" >Red</color_swatch> <color_swatch image="navy_cardigan.jpg" >Navy</color_swatch> <color_swatch image="burgundy_cardigan.jpg" >Burgundy</color_swatch> </size> </catalog_item> </product> </catalog>

With SwiftyXML all you have to do is:

swift
let xml = XML(string: xmlContent) let color0 = xml.product.catalog_item.size.color_swatch.1.string //"Burgundy" // notice that, we use "$" prefix for subscript attribute let description0 = xml.product.catalog_item.size.1.$description.string //"Large"

This is same as below, SwiftyXML will auto pick the first element as default:

swift
let xml = XML(data: xmlFileData) let color = xml.product.0.catalog_item.0.size.0.color_swatch.1.string //return "Burgundy"

What about if you input some wrong keys:

swift
let xml = XML(data: xmlFileData) // print the error if let color1 = xml.product.catalog_item.wrong_size.wrong_color.1.xml { // do stuff ~ print(color1) } else { print(xml.product.catalog_item.wrong_size.wrong_color.1.error) //.product.0.catalog_item.0: no such children named: "wrong_size" }

Requirements

  • iOS 17.0+ | macOS 14.0+ | tvOS 17.0+ | watchOS 10.0+
  • Xcode 16.2

Build & Test

Swift Package Manager

bash
swift build swift test

Mac Catalyst 17

bash
xcodebuild -scheme SwiftyXML -destination "generic/platform=macOS,variant=Mac Catalyst" build

Installation

CocoaPods

You can use CocoaPods to install SwiftyXML by adding it to your Podfile:

ruby
platform :ios, '8.0' use_frameworks! target 'MyApp' do pod 'SwiftyXML', '~> 3.0.0' end

Carthage

Create a Cartfile that lists the framework and run carthage update. Follow the instructions to add $(SRCROOT)/Carthage/Build/iOS/SwiftyXML.framework to an iOS project.

github "chenyunguiMilook/SwiftyXML" ~> 3.0.0

Manually

  1. Download and drop XML.swift into your project.
  2. Congratulations!

Swift Package Manager

You can use The Swift Package Manager to install SwiftyXML by adding the proper description to your Package.swift file:

swift
.package(url: "https://github.com/chenyunguiMilook/SwiftyXML.git", from: "3.0.2")

Usage

Initialization

swift
import SwiftyXML
swift
let xml = XML(data: xmlFileData)

Access XML and print out the error

swift
if let color1 = xml.product.catalog_item.wrong_size.wrong_color.1.xml { // do stuff ~ print(color1) } else { print(xml.product.catalog_item.wrong_size.wrong_color.1.error) }

Catch the error

swift
// catch the error do { let color = try xml.product.catalog_item.wrong_size.wrong_color.1.getXML() print(color) } catch { print(error) }

Access XML List

swift
// handle xml list for catalog in xml.product.catalog_item { for size in catalog.size { print(size.$description.stringValue) } }

Read Enums

Swift
// read enum value, Notice: enum need implements RawRepresentable public enum Color : String { case Red, Navy, Burgundy } if let c: Color = xml.product.catalog_item.size.color_swatch.enum() { print(c) }

Construct XML

swift
let store = XML(name: "store") .addAttribute(name: "description", value: "Ball Store") .addChildren([ // attributes can be added in the initializer XML(name: "product", attributes: [ "name": "football", "weight": 0.453 ]) ]) // attributes can be added to an existing object let product2 = XML(name: "product") product2.addAttribute(name: "name", value: "basketball") product2.addAttribute(name: "weight", value: 0.654) // children can be added to an existing object store.addChild(product2) print(store.toXMLString())
xml
// store xml output <store description="Ball Store" > <product name="football" weight="0.453" /> <product name="basketball" weight="0.654" /> </store>

构建与测试

核心命令

  • 标准构建: swift build
  • Mac Catalyst 17:
    bash
    xcodebuild -scheme SwiftyXML -destination "generic/platform=macOS,variant=Mac Catalyst" build
  • 运行测试: swift test

Contributors

Showing top 4 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from chenyunguiMilook/SwiftyXML via the GitHub API.Last fetched: 6/28/2026