Elixir native XML parser that enables search using attribute or element names
The package can be installed by adding xmlx
to your list of dependencies in mix.exs
:
def deps do
[{:xmlx, "~> 0.1.1"}]
end
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body type="text">Don't forget me this weekend!</body>
</note>
-
Document parse
File.read!("simple.xml") |> Xmlx.parse()
[ note: [ to: [text: "Tove"], from: [text: "Jani"], heading: [text: "Reminder"], body: ["@type": "text", text: "Don't forget me this weekend!"] ] ]
-
Find by element name
File.read!("simple.xml") |> Xmlx.parse() |> Xmlx.find(:from)
or
File.read!("simple.xml") |> Xmlx.parse() |> Xmlx.find("from")
result
[from: [text: "Jani"]]
-
Find by attribute name
File.read!("simple.xml") |> Xmlx.parse() |> Xmlx.find(:"@type")
or
File.read!("simple.xml") |> Xmlx.parse() |> Xmlx.find("@type")
result
["@type": "text"]
<?xml version="1.0"?>
<definitions name="EndorsementSearch"
targetNamespace="http://namespaces.snowboard-info.com"
xmlns:es="http://www.snowboard-info.com/EndorsementSearch.wsdl"
xmlns:esxsd="http://schemas.snowboard-info.com/EndorsementSearch.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
>
<!-- omitted types section with content model schema info -->
<message name="GetEndorsingBoarderRequest">
<part name="body" element="esxsd:GetEndorsingBoarder"/>
</message>
<message name="GetEndorsingBoarderResponse">
<part name="body" element="esxsd:GetEndorsingBoarderResponse"/>
</message>
<portType name="GetEndorsingBoarderPortType">
<operation name="GetEndorsingBoarder">
<input message="es:GetEndorsingBoarderRequest"/>
<output message="es:GetEndorsingBoarderResponse"/>
<fault message="es:GetEndorsingBoarderFault"/>
</operation>
</portType>
<binding name="EndorsementSearchSoapBinding"
type="es:GetEndorsingBoarderPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetEndorsingBoarder">
<soap:operation
soapAction="http://www.snowboard-info.com/EndorsementSearch"/>
<input>
<soap:body use="literal"
namespace="http://schemas.snowboard-info.com/EndorsementSearch.xsd"/>
</input>
<output>
<soap:body use="literal"
namespace="http://schemas.snowboard-info.com/EndorsementSearch.xsd"/>
</output>
<fault>
<soap:body use="literal"
namespace="http://schemas.snowboard-info.com/EndorsementSearch.xsd"/>
</fault>
</operation>
</binding>
<service name="EndorsementSearchService">
<documentation>snowboarding-info.com Endorsement Service</documentation>
<port name="GetEndorsingBoarderPort"
binding="es:EndorsementSearchSoapBinding">
<soap:address location="http://www.snowboard-info.com/EndorsementSearch"/>
</port>
</service>
</definitions>
-
Document parse
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
File.read!("simple.wsdl") |> Xmlx.parse() |> Xmlx.find(:"{http://schemas.xmlsoap.org/wsdl/}port")
or
File.read!("simple.wsdl") |> Xmlx.parse() |> Xmlx.find("{http://schemas.xmlsoap.org/wsdl/}port")
or
File.read!("simple.wsdl") |> Xmlx.parse() |> Xmlx.find("port")
result
[ "{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
File.read!("simple.wsdl") |> Xmlx.parse() |> Xmlx.find(:"@location")
or
File.read!("simple.wsdl") |> Xmlx.parse() |> Xmlx.find("@location")
result
["@location": "http://www.snowboard-info.com/EndorsementSearch"]