Я пытаюсь разобрать ответ XML для обработки заказов на продажу, но поиск XPath не работает.Поиск по пространству имен не найден элемент
Вот фрагмент ответа XML:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<SalesOrderServiceFindResponse xmlns="http://schemas.microsoft.com/dynamics/2008/01/services">
<SalesOrder xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesOrder">
<DocPurpose>Original</DocPurpose>
<SenderId>bell</SenderId>
<SalesTable class="entity">
<_DocumentHash>33e9a9be2bcafdb1edde17c4e12d1166</_DocumentHash>
<ConsTarget_JP>No</ConsTarget_JP>
<CurrencyCode>USD</CurrencyCode>
<CustAccount>ANDE01</CustAccount>
<CustGroup>Distributo</CustGroup>
<CustomsExportOrder_IN>No</CustomsExportOrder_IN>
<CustomsShippingBill_IN>No</CustomsShippingBill_IN>
<DAXIntegrationId>{5A1B9C05-99DD-4E4E-91F1-2702117CEF98}</DAXIntegrationId>
<Deadline>2016-03-31</Deadline>
<DeliveryDate>2016-03-01</DeliveryDate>
...
</SalesTable>
<SalesTable>
...
</SalesTable>
</SalesOrder>
</SalesOrderServiceFindResponse>
</s:Body>
</s:Envelope>
Есть несколько <SalesTable>
сущности, которые я пытаюсь получить через так что я могу обрабатывать данные во внешней системе.
Однако, следующее не работает:
response = client.call(:find,
message_tag: :SalesOrderServiceFindRequest,
message: {
:query_criteria => {
:@xmlns => "http://schemas.microsoft.com/dynamics/2006/02/documents/QueryCriteria",
:criteria_element => {
:data_source_name => "SalesTable",
:field_name => "CustGroup",
:operator => "Equal",
:value1 => "Distributo",
}
}
}
)
Это пустая:
puts response.xpath("//SalesTable")
Это пустая тоже:
puts response.xpath("//SalesOrder/SalesTable", "xmlns" => "http://schemas.microsoft.com/dynamics/2008/01/documents/SalesOrder") # empty
Так это:
puts response.xpath("//SalesOrder", "xmlns" => "http://schemas.microsoft.com/dynamics/2008/01/documents/SalesOrder")
Я не понимаю, потому что я могу проверить, что есть элемент SalesTable
, поэтому его нужно найти, но он не работает.
Да, это правильный ответ. Вы можете прочитать больше в [учебнике Nokogiri по поиску] (http://www.nokogiri.org/tutorials/searching_a_xml_html_document.html#namespaces). –
Проблема заключается в том, что этот элемент не содержит имен с этим префиксом. Я не могу контролировать то, что система отвечает, потому что это ответ Microsoft Dynamics AIF. Я не могу заставить его добавить другое пространство имен таким образом. – Oranges13
Не работает. Тег: '' не '', поэтому он все еще не соответствует. –
Oranges13