Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ymtszw/elm-xml-decode
Elm XML decoder sharing the spirit of Json.Decode
https://github.com/ymtszw/elm-xml-decode
decoder elm elm-lang xml
Last synced: 3 months ago
JSON representation
Elm XML decoder sharing the spirit of Json.Decode
- Host: GitHub
- URL: https://github.com/ymtszw/elm-xml-decode
- Owner: ymtszw
- License: bsd-3-clause
- Created: 2017-12-05T15:32:37.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-05-23T06:38:15.000Z (8 months ago)
- Last Synced: 2024-09-30T05:22:08.388Z (4 months ago)
- Topics: decoder, elm, elm-lang, xml
- Language: Elm
- Homepage: http://package.elm-lang.org/packages/ymtszw/elm-xml-decode/latest/
- Size: 930 KB
- Stars: 16
- Watchers: 4
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# elm-xml-decode
[![Main Workflow](https://github.com/ymtszw/elm-xml-decode/actions/workflows/main.yml/badge.svg)](https://github.com/ymtszw/elm-xml-decode/actions/workflows/main.yml)
XML decoder, sharing the spirit of [`Json.Decode`][jd]. Ready for Elm 0.19.
Using [miniBill/elm-xml-parser][exp] as its parser component, which is based on [elm/parser][ep].
[jd]: https://github.com/elm/json
[exp]: http://github.com/miniBill/elm-xml-parser
[ep]: https://github.com/elm/parser## Related Works
[eeue56/elm-xml][ex] was an existing full-package XML parser/decoder for Elm,
though I intended to provide an alternative XML decoder which exhibits following properties:- Provides [`Decoder`][de]-based APIs, sharing the spirit of [`Json.Decode`][jd]
- Also provides DSL-styled decoder compositions, sharing the sprits of [`Json.Decode.Pipeline`][jdp]
- Handles list of XML node with identical tags, using [`ListDecoder`][ld] type
- Locates targeting XML nodes using "path" of tags, partially mimicking XPath[ex]: https://github.com/eeue56/elm-xml
[de]: https://package.elm-lang.org/packages/ymtszw/elm-xml-decode/latest/Xml-Decode#Decoder
[jdp]: https://package.elm-lang.org/packages/NoRedInk/elm-decode-pipeline/latest/Json-Decode-Pipeline
[ld]: https://package.elm-lang.org/packages/ymtszw/elm-xml-decode/latest/Xml-Decode#ListDecoder## Examples
Basics:
```elm
import Xml.Decode exposing (..)type alias Data =
{ string : String
, integers : List Int
}dataDecoder : Decoder Data
dataDecoder =
map2 Data
(path [ "path", "to", "string", "value" ] (single string))
(path [ "path", "to", "int", "values" ] (list int))run dataDecoder
"""
SomeString
1
2
"""
--> Ok { string = "SomeString", integers = [ 1, 2 ] }
```### Pipeline Decoder compositions
We have `map`, `map2` and variants, though the Pipeline style is also possible:
```elm
pipelineDecoder : Decoder Data
pipelineDecoder =
succeed Data
|> requiredPath [ "path", "to", "string", "value" ] (single string)
|> requiredPath [ "path", "to", "int", "values" ] (list int)
```## Development
Install reasonably new Node.js (currently [Node.js 22 is tested](https://github.com/ymtszw/elm-xml-decode/blob/master/.github/workflows/main.yml))
```sh
npm install
npm test
```## Benchmarks
Benchmark app can be found in `benchmarks/` directory.
Using [examples in W3School](https://www.w3schools.com/xml/xml_examples.asp) and
[elm-explorations/benchmark](https://github.com/elm-explorations/benchmark).```sh
npm run generate-benchmark
# Open docs/index.html
```Also available at
**It may hang for a while** during JIT warming up, but keep waiting (~ a minute).
### Elm 0.19.1, elm-xml-decode 3.2.1
Sample result (on my Windows 10 machine):
- Environment
- CPU: Intel Core i7-8700K @ 3.7GHz
- Mem: 64GB
- Windows 10 Pro, 10.0.19044
- Google Chrome 98.0.4758.82 64bit
- Versions
- elm 0.19.1
- elm-xml-decode version: 3.2.1
- elm-benchmark 1.0.2![bench20220219](https://raw.githubusercontent.com/ymtszw/elm-xml-decode/master/benchmarks/result20220219.png)
## License
BSD-3-Clause