Xmlx
Elixir native XML parser that enables search using attribute or element names
Installation
If available in Hex, the package can be installed as:
- Add
xmlxto your list of dependencies inmix.exs:
```elixir
def deps do
[{:xmlx, "~> 0.0.1"}]
end
```
- Ensure
xmlxis started before your application:
```elixir
def application do
[applications: [:xmlx]]
end
```
Usage
XML Example (simple.xml)
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Document parse
elixir File.read!("simple.xml") |> Xmlx.parse()[note: [to: [text: "Tove"], from: [text: "Jani"], heading: [text: "Reminder"], body: [text: "Don't forget me this weekend!"]]]Find element/attribute
elixir File.read!("simple.xml") |> Xmlx.parse() |> Xmlx.find(:from)orelixir File.read!("simple.xml") |> Xmlx.parse() |> Xmlx.find("from")[from: [text: "Jani"]]
WSDL Example (simple.wsdl)
<?xml version="1.0"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="HelloService" targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl">
<message name="SayHelloRequest">
<part name="firstName" type="xsd:string"/>
</message>
<message name="SayHelloResponse">
<part name="greeting" type="xsd:string"/>
</message>
<portType name="Hello_PortType">
<operation name="sayHello">
<input message="tns:SayHelloRequest"/>
<output message="tns:SayHelloResponse"/>
</operation>
</portType>
<binding name="Hello_Binding" type="tns:Hello_PortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sayHello">
<soap:operation soapAction="sayHello"/>
<input>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:helloservice" use="encoded"/>
</input>
<output>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:helloservice" use="encoded"/>
</output>
</operation>
</binding>
<service name="Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding="tns:Hello_Binding" name="Hello_Port">
<soap:address location="http://www.examples.com/SayHello/"/>
</port>
</service>
</definitions>
Document parse
elixir File.read!("simple.wsdl") |> Xmlx.parse()["{http://schemas.xmlsoap.org/wsdl/}definitions": ["@name": "EndorsementSearch", "@targetNamespace": "http://namespaces.snowboard-info.com", "{http://schemas.xmlsoap.org/wsdl/}message": ["@name": "GetEndorsingBoarderRequest", "{http://schemas.xmlsoap.org/wsdl/}part": ["@name": "body", "@element": "esxsd:GetEndorsingBoarder"]], "{http://schemas.xmlsoap.org/wsdl/}message": ["@name": "GetEndorsingBoarderResponse", "{http://schemas.xmlsoap.org/wsdl/}part": ["@name": "body", "@element": "esxsd:GetEndorsingBoarderResponse"]], "{http://schemas.xmlsoap.org/wsdl/}portType": ["@name": "GetEndorsingBoarderPortType", "{http://schemas.xmlsoap.org/wsdl/}operation": ["@name": "GetEndorsingBoarder", "{http://schemas.xmlsoap.org/wsdl/}input": ["@message": "es:GetEndorsingBoarderRequest"], "{http://schemas.xmlsoap.org/wsdl/}output": ["@message": "es:GetEndorsingBoarderResponse"], "{http://schemas.xmlsoap.org/wsdl/}fault": ["@message": "es:GetEndorsingBoarderFault"]]], "{http://schemas.xmlsoap.org/wsdl/}binding": ["@name": "EndorsementSearchSoapBinding", "@type": "es:GetEndorsingBoarderPortType", "{http://schemas.xmlsoap.org/wsdl/soap/}binding": ["@style": "document", "@transport": "http://schemas.xmlsoap.org/soap/http"], "{http://schemas.xmlsoap.org/wsdl/}operation": ["@name": "GetEndorsingBoarder", "{http://schemas.xmlsoap.org/wsdl/soap/}operation": ["@soapAction": "http://www.snowboard-info.com/EndorsementSearch"], "{http://schemas.xmlsoap.org/wsdl/}input": ["{http://schemas.xmlsoap.org/wsdl/soap/}body": ["@use": "literal", "@namespace": "http://schemas.snowboard-info.com/EndorsementSearch.xsd"]], "{http://schemas.xmlsoap.org/wsdl/}output": ["{http://schemas.xmlsoap.org/wsdl/soap/}body": ["@use": "literal", "@namespace": "http://schemas.snowboard-info.com/EndorsementSearch.xsd"]], "{http://schemas.xmlsoap.org/wsdl/}fault": ["{http://schemas.xmlsoap.org/wsdl/soap/}body": ["@use": "literal", "@namespace": "http://schemas.snowboard-info.com/EndorsementSearch.xsd"]]]], "{http://schemas.xmlsoap.org/wsdl/}service": ["@name": "EndorsementSearchService", "{http://schemas.xmlsoap.org/wsdl/}documentation": [text: "snowboarding-info.com Endorsement Service"], "{http://schemas.xmlsoap.org/wsdl/}port": ["@name": "GetEndorsingBoarderPort", "@binding": "es:EndorsementSearchSoapBinding", "{http://schemas.xmlsoap.org/wsdl/soap/}address": ["@location": "http://www.snowboard-info.com/EndorsementSearch"]]]]]Find by element name
elixir File.read!("simple.wsdl") |> Xmlx.parse() |> Xmlx.find(:"{http://schemas.xmlsoap.org/wsdl/}port")orelixir File.read!("simple.wsdl") |> Xmlx.parse() |> Xmlx.find("{http://schemas.xmlsoap.org/wsdl/}port")orelixir File.read!("simple.wsdl") |> Xmlx.parse() |> Xmlx.find("port")["{http://schemas.xmlsoap.org/wsdl/}port": ["@name": "GetEndorsingBoarderPort", "@binding": "es:EndorsementSearchSoapBinding", "{http://schemas.xmlsoap.org/wsdl/soap/}address": ["@location": "http://www.snowboard-info.com/EndorsementSearch"]]]Find by attribute name
elixir File.read!("simple.wsdl") |> Xmlx.parse() |> Xmlx.find(:"@location")orelixir File.read!("simple.wsdl") |> Xmlx.parse() |> Xmlx.find("@location")["@location": "http://www.snowboard-info.com/EndorsementSearch"]