Хранение вложенных дочерних узлов из XML-ответа WebService в виде массива массивов в ruby - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь сравнить XML-ответ веб-службы со значениями из базы данных.

У меня есть XML-ответ SOAP WebService, сохраненный в переменной как RestClient::Response, как указано ниже:

Значения каждого узла и узла внутри каждого тега элемента необходимо сравнивать с результатом запроса базы данных, т.е. после выполнения запроса базы данных первая строка результата запроса равна ['Reason 1', 'T', 'OPEN', '2019-05-20', '2019-06-04', 'T'].Точно так же другие строки также обозначают значения, которые необходимо сравнивать с любыми другими значениями дочерних узлов внутри тега элемента.Используя ruby, я сохранил результат запроса db в виде массива массивов, где каждый внутренний массив является строкой.

Как сохранить все значения дочерних узлов внутри каждого тега элемента в виде массива массивов, чтобы я могсравнить их со значениями в БД?Например:

[["Reason 1", "T", "OPEN", "2019-05-20", "2019-06-04", "T"], ["Reason 3", "T", "OPEN", "2019-05-20", "2019-05-28", "T"]]

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <a:Details xmlns:a="http://service.test.ws.project/">
         <items>
            <item>
               <reason>Reason 2</reason>
               <DisplayInWeb>F</DisplayInWeb>
               <status>OPEN</status>
               <availableDate>2019-05-20</availableDate>
               <expiryDate>2019-05-21</expiryDate>
               <sold>T</sold>
            </item>
            <item>
               <reason>Reason 1</reason>
               <DisplayInWeb>T</DisplayInWeb>
               <status>OPEN</status>
               <availableDate>2019-05-20</availableDate>
               <expiryDate>2019-06-04</expiryDate>
               <sold>T</sold>
            </item>
            <item>
               <reason>Reason 3</reason>
               <DisplayInWeb>T</DisplayInWeb>
               <status>OPEN</status>
               <availableDate>2019-05-20</availableDate>
               <expiryDate>2019-05-28</expiryDate>
               <sold>F</sold>
            </item>
           <Count>3</Count>
         </items>
      </a:Details>
   </soap:Body>
</soap:Envelope>
def get_response_node_values_as_array(parent_tag_name)
    response_xml = Nokogiri::XML $response
    puts response_xml
    child_arr = Array.new
    response_xml.xpath("//#{parent_tag_name}").each { |node|
      searched_field_arr << node.value
         }
    return child_arr
end

Я передавал имя родительского тега, который здесь является item в качестве аргумента метода.Ожидается, что он вернет массив массивов со значениями дочерних узлов, доступных под каждым родителем.

...