2

So I have this complicated XML and want it to parse it to array and send by Savon to the server. The question is how can I parse parameters?

<soapenv:Header>
    <add:MessageID
        xmlns:add="http://www.w3.org">sdhuf78dd67-8932
    </add:MessageID>
    <add:Action
        xmlns:add="http://www.w3.org/2005">http://google/FMP
    </add:Action>
    <add:To
        xmlns:add="http://www.w3.org/2005/08/addressing">https://no1.testbla.com/1HAD9ANA1
    </add:To>
    <link:TransactionFlowLink
        xmlns:link="http://google/2010/06/"/>
        <oas:Security
            xmlns:oas="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <oas:UsernameToken oas1:Id="UsernameToken-1"
                xmlns:oas1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                <oas:Username>AHOJHOLA</oas:Username>
                <oas:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">Nonce</oas:Nonce>
                <oas:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">HashedPassword</oas:Password>
                <oas1:Created>CurrentGMTDateAndTime</oas1:Created>
            </oas:UsernameToken>
        </oas:Security>
        <AMA_SecurityHostedUser
            xmlns="http://xml.amfds.com/2010/06">
            <UserID AgentDutyCode="DA" RequestorType="BO" PseudoCityCode="HIATRA67" POS_Type="5"/>
        </AMA_SecurityHostedUser>
</soapenv:Header>

I know how to parse for example add:Action without parameter:

"add:Action" => "http://google/FMP"

And I know that parameter should be written with @ prefix.

But I dont know how to write it together. Is this right?

"add:Action" => {
    "@xmlns:add" => "http://www.w3.org/2005",
    "http://google/FMP"
},etc.
Boomerange
  • 616
  • 1
  • 10
  • 18

1 Answers1

1

To find out this information, you need to go and have a look at the Gyoku gem: the gem that Savon uses to translate Ruby hashes into XML. Specifically, the documentation on using explicit XML attributes. Looking at that, we can get the XML you're looking for with the following hash:

{
  "add:Action" => {
    "@xmlns:add" => "http://www.w3.org/2005",
    :content! => "http://google/FMP"
  }
}

We can test this in IRB directly with Gyoku:

irb> require 'gyoku'
# => true
irb> Gyoku.xml({"add:Action" => { "@xmlns:add" => "http://www.w3.org/2005", :content! => "http://google/FMP" } })
# => "<add:Action xmlns:add=\"http://www.w3.org/2005\">http://google/FMP</add:Action>"
Paul Fioravanti
  • 16,423
  • 7
  • 71
  • 122