3

次の回答からの値を読みたいcustomer.customer_info_id。私の応答には名前空間も含まれています。

<Field name="customer.customer_id" value="5403699387967341892"/>
<Field name="**customer.customer_info_id**" value="5403699387967341892"/>
<Field name="customer.customer_since_code" value="1985">
    <Lookup language="EN" value="1985"/>
    <Lookup language="FR" value="1985"/>
</Field>

私は次のことを試しました:

# Savon code tried:        

doc = Nokogiri::XML(response.to_xml)
doc.remove_namespaces!
val = doc.xpath("//Field:name" => "Customer.entity_id").to_s
puts "val is: #{val}"

null値を返します。

4

3 に答える 3

2

XML応答を解析する必要はないと思います。Savonがあなたに代わってそれを行います。呼び出しのコードを提供しなかったので、soapになると思います。

client = Savon::Client.new do
  wsdl.document = <your url>
end

response = client.request :wsdl, :soap do
  <your parameters go here>
end

# pp response.to_hash

result = response.to_hash[:soap_response][:soap_result][:customer][:customer_info_id]

私はよくpp response.to_hash何が返されるかを知るために使用します。

于 2012-06-27T16:04:55.797 に答える
0

私はSavonとさまざまな結果を出しました。最終的に、私が扱っているWSDLStringWithAttributesは解析を必要とするクラスを返しますが、それまでは通常のハッシュのように動作するはずです。つまり、次のようなことができるはずです。

client = Savon::Client.new do
  wsdl.document = <your url>
end

response = client.request(:whatever_the_request_is_called) do
  soap.body = { <hash of your parameters> }
end

result = response[:soap_response][:soap_result][:customer][:customer_info_id]

それでもnull値を取得している場合は、各レベルでpp response[:soap_response].classまたは.keysを試して、ハッシュを使用していることを確認してください。それが奇妙なStringwithAttributesクラスになった場合は、それを解析する必要があります。これは、多くのレベルに下がった後に発生するようです。その場合、次のようなことができます。

needs_parsing = response.to_hash[:soap_response][:soap_result]

parsed = Nori.parse(needs_parsing)

次に、で確認できるナビゲート可能なハッシュに戻る必要があります.class

于 2012-07-15T02:48:05.793 に答える
0

Nokogiriを使用した以下のコードは、特定のxml要素値を読み取るために機能しました。

doc=Nokogiri.XML(File.open(File.dirname("your file name here"))

element=doc.at('element_name') #fetch the value of element needed.
于 2012-12-24T11:28:01.310 に答える