Exampple.Xml.Xmlel (exampple v0.10.6)
Xmlel is a struct data which is intended to help with the parsing of the XML elements.
Link to this section Summary
Types
Xmlel.t
defines the xmlel
element which contains the name
, the
attrs
(attributes) and children
for the XML tags.
Functions
This function removes the extra spaces inside of the stanzas starting from
xmlel
to ensure we can perform matching in a proper way.
This function is a helper function to translate the tuples coming
from Saxy into de data
parameter to the Exampple.Xml.Xmlel
structs.
Deletes an attribute by name
from a xmlel
struct.
This function is a helper function to translate the content of the
xmlel
structs to the tuples needed by Saxy.
Access the value stored under key
passing the stanza in
Exampple.Xml.Xmlel
format into the xmlel
parameter.
Access the value under key
and update it at the same time for the xmlel
using the function
passed as paramter.
Retrieve an attribute by name
from a xmlel
struct. If the value
is not found the default
value is used instead. If default
is
not provided then nil
is used as default value.
Creates a Xmlel struct passing the name
of the stanza, the attrs
as a map or keyword list to create the attributes and children
for
the payload of the XML tag. This is not recursive so it's intended
the children has to be in a correct format.
Parser a xml
string into Exampple.Xml.Xmlel
struct.
Pop the value under key
passed an Exampple.Xml.Xmlel
struct as element
.
Add or set a value
by name
as attribute inside of the xmlel
struct
passed as parameter.
Add or set one or several attributes using fields
inside of the xmlel
struct passed as parameter. The fields
data are in keyword list format.
Sigil to use ~X to provide XML string
and transform it to Xmlel struct.
Note that we are not using addons
.
Sigil to use ~x to provide XML string
and transform it to Xmlel struct
removing spaces and breaking lines.
Note that we are not using addons
.
Link to this section Types
attr_name()
Specs
attr_name() :: binary()
attr_value()
Specs
attr_value() :: binary()
attrs()
Specs
attrs() :: %{required(attr_name()) => attr_value()}
children()
Specs
Specs
Xmlel.t
defines the xmlel
element which contains the name
, the
attrs
(attributes) and children
for the XML tags.
Link to this section Functions
clean_spaces(xmlel)
This function removes the extra spaces inside of the stanzas starting from
xmlel
to ensure we can perform matching in a proper way.
Examples:
iex> "<foo>\n <bar>\n Hello<br/>world!\n </bar>\n</foo>"
iex> |> Exampple.Xml.Xmlel.parse()
iex> |> Exampple.Xml.Xmlel.clean_spaces()
iex> |> to_string()
"<foo><bar>Hello<br/>world!</bar></foo>"
decode(data)
This function is a helper function to translate the tuples coming
from Saxy into de data
parameter to the Exampple.Xml.Xmlel
structs.
Examples:
iex> Exampple.Xml.Xmlel.decode({"foo", [], []})
%Exampple.Xml.Xmlel{name: "foo", attrs: %{}, children: []}
iex> Exampple.Xml.Xmlel.decode({"foo", [], [{:characters, "1&1"}]})
%Exampple.Xml.Xmlel{name: "foo", children: ["1&1"]}
iex> Exampple.Xml.Xmlel.decode({"bar", [{"id", "10"}], ["Hello!"]})
%Exampple.Xml.Xmlel{name: "bar", attrs: %{"id" => "10"}, children: ["Hello!"]}
delete_attr(xmlel, name)
Deletes an attribute by name
from a xmlel
struct.
Examples:
iex> attrs = %{"id" => "100", "name" => "Alice"}
iex> xmlel = %Exampple.Xml.Xmlel{attrs: attrs}
iex> Exampple.Xml.Xmlel.get_attr(xmlel, "name")
"Alice"
iex> Exampple.Xml.Xmlel.delete_attr(xmlel, "name")
iex> |> Exampple.Xml.Xmlel.get_attr("name")
nil
encode(xmlel)
This function is a helper function to translate the content of the
xmlel
structs to the tuples needed by Saxy.
Examples:
iex> Exampple.Xml.Xmlel.encode(%Exampple.Xml.Xmlel{name: "foo"})
{"foo", [], []}
iex> Exampple.Xml.Xmlel.encode(%Exampple.Xml.Xmlel{name: "bar", attrs: %{"id" => "10"}, children: ["Hello!"]})
{"bar", [{"id", "10"}], [{:characters, "Hello!"}]}
iex> Exampple.Xml.Xmlel.encode(%TestBuild{name: "bro"})
"<bro/>"
fetch(xmlel, key)
Access the value stored under key
passing the stanza in
Exampple.Xml.Xmlel
format into the xmlel
parameter.
Examples:
iex> import Exampple.Xml.Xmlel
iex> el = ~x(<foo><c1 v="1"/><c1 v="2"/><c2/></foo>)
iex> fetch(el, "c1")
{:ok, [%Exampple.Xml.Xmlel{attrs: %{"v" => "1"}, children: [], name: "c1"}, %Exampple.Xml.Xmlel{attrs: %{"v" => "2"}, children: [], name: "c1"}]}
iex> fetch(el, "nonexistent")
:error
get_and_update(xmlel, key, function)
Access the value under key
and update it at the same time for the xmlel
using the function
passed as paramter.
Examples:
iex> import Exampple.Xml.Xmlel
iex> el = ~x(<foo><c1 v="1"/><c1 v="2"/><c2/></foo>)
iex> fun = fn els ->
iex> values = Enum.map(els, fn %Exampple.Xml.Xmlel{attrs: %{"v" => v}} = el -> %Exampple.Xml.Xmlel{el | attrs: %{"v" => "v" <> v}} end)
iex> {els, values}
iex> end
iex> get_and_update(el, "c1", fun)
{[%Exampple.Xml.Xmlel{attrs: %{"v" => "1"}, children: [], name: "c1"}, %Exampple.Xml.Xmlel{attrs: %{"v" => "2"}, children: [], name: "c1"}], %Exampple.Xml.Xmlel{attrs: %{}, children: [%Exampple.Xml.Xmlel{attrs: %{"v" => "v1"}, children: [], name: "c1"}, %Exampple.Xml.Xmlel{attrs: %{"v" => "v2"}, children: [], name: "c1"}, %Exampple.Xml.Xmlel{attrs: %{}, children: [], name: "c2"}], name: "foo"}}
iex> fun = fn _els -> :pop end
iex> get_and_update(el, "c1", fun)
{[%Exampple.Xml.Xmlel{attrs: %{"v" => "1"}, children: [], name: "c1"}, %Exampple.Xml.Xmlel{attrs: %{"v" => "2"}, children: [], name: "c1"}], %Exampple.Xml.Xmlel{attrs: %{}, children: [%Exampple.Xml.Xmlel{attrs: %{}, children: [], name: "c2"}], name: "foo"}}
get_attr(xmlel, name, default \\ nil)
Retrieve an attribute by name
from a xmlel
struct. If the value
is not found the default
value is used instead. If default
is
not provided then nil
is used as default value.
Examples:
iex> attrs = %{"id" => "100", "name" => "Alice"}
iex> xmlel = %Exampple.Xml.Xmlel{attrs: attrs}
iex> Exampple.Xml.Xmlel.get_attr(xmlel, "name")
"Alice"
iex> Exampple.Xml.Xmlel.get_attr(xmlel, "surname")
nil
new(name, attrs \\ %{}, children \\ [])
Specs
Creates a Xmlel struct passing the name
of the stanza, the attrs
as a map or keyword list to create the attributes and children
for
the payload of the XML tag. This is not recursive so it's intended
the children has to be in a correct format.
The children could be or binaries (strings) representing CDATA or other
Exampple.Xml.Xmlel
elements.
Examples:
iex> Exampple.Xml.Xmlel.new("foo")
%Exampple.Xml.Xmlel{attrs: %{}, children: [], name: "foo"}
iex> Exampple.Xml.Xmlel.new("bar", %{"id" => "10"})
%Exampple.Xml.Xmlel{attrs: %{"id" => "10"}, children: [], name: "bar"}
iex> Exampple.Xml.Xmlel.new("bar", [{"id", "10"}])
%Exampple.Xml.Xmlel{attrs: %{"id" => "10"}, children: [], name: "bar"}
parse(xml)
Parser a xml
string into Exampple.Xml.Xmlel
struct.
Examples:
iex> Exampple.Xml.Xmlel.parse("<foo/>")
{%Exampple.Xml.Xmlel{name: "foo", attrs: %{}, children: []}, ""}
iex> Exampple.Xml.Xmlel.parse("<foo bar='10'>hello world!</foo>")
{%Exampple.Xml.Xmlel{name: "foo", attrs: %{"bar" => "10"}, children: ["hello world!"]}, ""}
iex> Exampple.Xml.Xmlel.parse("<foo><bar>hello world!</bar></foo>")
{%Exampple.Xml.Xmlel{name: "foo", attrs: %{}, children: [%Exampple.Xml.Xmlel{name: "bar", attrs: %{}, children: ["hello world!"]}]}, ""}
iex> Exampple.Xml.Xmlel.parse("<foo/><bar/>")
{%Exampple.Xml.Xmlel{name: "foo", attrs: %{}, children: []}, "<bar/>"}
pop(element, key)
Pop the value under key
passed an Exampple.Xml.Xmlel
struct as element
.
Examples:
iex> import Exampple.Xml.Xmlel
iex> el = ~x(<foo><c1 v="1"/><c1 v="2"/><c2/></foo>)
iex> pop(el, "c1")
{[%Exampple.Xml.Xmlel{attrs: %{"v" => "1"}, children: [], name: "c1"}, %Exampple.Xml.Xmlel{attrs: %{"v" => "2"}, children: [], name: "c1"}], %Exampple.Xml.Xmlel{attrs: %{}, children: [%Exampple.Xml.Xmlel{attrs: %{}, children: [], name: "c2"}], name: "foo"}}
iex> pop(el, "nonexistent")
{[], %Exampple.Xml.Xmlel{attrs: %{}, children: [%Exampple.Xml.Xmlel{attrs: %{"v" => "1"}, children: [], name: "c1"}, %Exampple.Xml.Xmlel{attrs: %{"v" => "2"}, children: [], name: "c1"}, %Exampple.Xml.Xmlel{attrs: %{}, children: [], name: "c2"}], name: "foo"}}
put_attr(xmlel, name, value)
Add or set a value
by name
as attribute inside of the xmlel
struct
passed as parameter.
Examples:
iex> attrs = %{"id" => "100", "name" => "Alice"}
iex> %Exampple.Xml.Xmlel{attrs: attrs}
iex> |> Exampple.Xml.Xmlel.put_attr("name", "Bob")
iex> |> Exampple.Xml.Xmlel.get_attr("name")
"Bob"
put_attrs(xmlel, fields)
Add or set one or several attributes using fields
inside of the xmlel
struct passed as parameter. The fields
data are in keyword list format.
Examples:
iex> fields = %{"id" => "100", "name" => "Alice", "city" => "Cordoba"}
iex> Exampple.Xml.Xmlel.put_attrs(%Exampple.Xml.Xmlel{name: "foo"}, fields) |> to_string()
"<foo city=\"Cordoba\" id=\"100\" name=\"Alice\"/>"
iex> fields = %{"id" => "100", "name" => "Alice", "city" => :"Cordoba"}
iex> Exampple.Xml.Xmlel.put_attrs(%Exampple.Xml.Xmlel{name: "foo"}, fields) |> to_string()
"<foo id=\"100\" name=\"Alice\"/>"
sigil_X(string, addons)
Sigil to use ~X to provide XML string
and transform it to Xmlel struct.
Note that we are not using addons
.
Examples:
iex> import Exampple.Xml.Xmlel
iex> ~X|<foo>
iex> </foo>
iex> |
%Exampple.Xml.Xmlel{attrs: %{}, children: ["\n "], name: "foo"}
sigil_x(string, addons)
Sigil to use ~x to provide XML string
and transform it to Xmlel struct
removing spaces and breaking lines.
Note that we are not using addons
.
Examples:
iex> import Exampple.Xml.Xmlel
iex> ~x|<foo>
iex> </foo>
iex> |
%Exampple.Xml.Xmlel{attrs: %{}, children: [], name: "foo"}