README.md

# Exogiri

Nokogiri.  But like, for Elixir.

**NOTE**: All objects are mutable, and thus process local.  If you try to pass XML nodes or XML documents between processes they will be inaccessible.

**DOUBLE NOTE**: C is **not** my first language.  I've probably got memory leaks and just plain logic errors hanging about all over.  Contributions and criticism welcome.

## Features

* XML Documents
  * [x] Read document from string
  * [ ] Read document from path
  * [x] Create new documents
  * [ ] Attribute support
    * [ ] Get/set for attributes by namespace
    * [x] Get/set without namespace
  * [ ] Element support
    * [x] Create new elements
    * [x] Remove elements
    * [x] Move elements
    * [ ] Copy elements
    * [ ] XML fragment support
    * [x] Set element content
    * [ ] Append element content
* XML Schemas
  * [x] Load schemas from string (with path awareness for includes)
  * [ ] Load schemas from path
  * [x] In-memory document validation
  * [ ] Streaming document validation (not fully supported by libxml2 - may not ever be completed)
* XSL Transforms
  * [x] Simple File transforms and parameters
  * [ ] Included/multi-file transform support
* XPath Support
  * [x] Return element lists
  * [ ] Return non-element result sets
  * [x] Namespaced queries
  * [ ] Namespaceless queries

## Installation

Using [Hex](https://hex.pm), the package can be installed by adding `exogiri` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:exogiri, "~> 0.3.0"}
  ]
end
```

The docs for the most recent version can be found at [Hex Docs](https://hexdocs.pm/exogiri).