0

VMwareOrchestratorAPIを介してVMwarevCenterへのカスタムポータルに取り組んでいます。私はsavonを使用してOrchestratorのSOAPAPI(WSDL)をクエリし、有効なデータを返します。具体的には、すべての仮想マシンを含むXMLです。

応答をRailsモデルに取り込むための最良/最も簡単な方法は何ですか?応答のXML構造は以下のとおりです...

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <findResponse xmlns="http://webservice.vso.dunes.ch">
         <findReturn>
            <totalCount>4</totalCount>
            <elements>
               <item>
                  <type>VC:VirtualMachine</type>
                  <id>vc.demo.local/vm-37</id>
                  <properties>
                     <item>
                        <name>displayName</name>
                        <value>FreeNAS</value>
                     </item>
                     <item>
                        <name>isTemplate</name>
                        <value>false</value>
                     </item>
                     <item>
                        <name>name</name>
                        <value>FreeNAS</value>
                     </item>
                     <item>
                        <name>connectionState</name>
                        <value>connected</value>
                     </item>
                     <item>
                        <name>state</name>
                        <value>poweredOff</value>
                     </item>
                     <item>
                        <name>vimHost</name>
                        <value>https://vc.demo.local:443/sdk</value>
                     </item>
                     <item>
                        <name>id</name>
                        <value>vm-37</value>
                     </item>
                     <item>
                        <name>dunesId</name>
                        <value>vc.demo.local/vm-37</value>
                     </item>
                  </properties>
                  <dunesUri>dunes://service.dunes.ch/CustomSDKObject?id='vc.demo.local/vm-37'&amp;dunesName='VC:VirtualMachine'</dunesUri>
               </item>
               <item>
   ...
               </item>
            </elements>
         </findReturn>
      </findResponse>
   </soapenv:Body>
</soapenv:Envelope>
4

2 に答える 2

0

nokogiri gem を使用して xml を解析します。nokogiri を使用すると、特定の親タグを持つすべての要素を取得するために xpath を呼び出すことができます。たとえば、xml を使用して:

     your_Model = Your_Model.new
     docs = Nokogiri::XML(your.xml)

     your_Model =  docs.xpath('//item').map do |i|
          {    
                #here you would need to map the objects of the xml to your model attributes so if your attributes were called, itemname, and itemvalue the code would be.
                   itemname => i.xpath('name').inner_text,
                   itemvalue => i.xpath('value').inner_text

          }
      your_Model.save!

このルートを選択する場合は、Nokogiri gem が必要であることを確認してください。

それが役に立てば幸い

于 2012-07-12T15:03:38.873 に答える
0

照会したいいくつかの重要な属性 (name、id、type) を選択し、残りの XML を clob または varchar として、またはデータベースがサポートしている場合はネイティブ XML タイプとして保存することができます。必要に応じて、コードで他の値を読み取ることができます。

于 2012-07-12T05:57:33.763 に答える