- Распечатать
Вводный текст
Вы нашли это резюме полезным?
Спасибо за ваш отзыв
Обзор
Руководство с советами и рекомендациями по работе с API на основе XML
Коннекторы Tulip Connectors могут использоваться для взаимодействия со многими типами внешних источников данных. Данная статья посвящена HTTP API, которые обмениваются информацией с использованием XML. В эту категорию входят и SOAP API.
Отправка XML-данных в Tulip
Для отправки XML-содержимого в теле запроса используйте нотацию $value$
, чтобы показать, что необходимо вставить параметр.
Например, в поле Request Body (Тело запроса) указано следующее:
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:mes="http://mes.myexample.com"
xmlns:get="http://getInfo.mes.myexample.com"
>
>
>
>
>
>
>
>
>
> $input1$
>
> $input2$
>
>
>
>
>
>
>
>
> ```
>
>
>
и значения `input1` и `input2` в качестве входных данных для функции-коннектора, формируется запрос с подставленными в тело запроса значениями `input1` и `input2`.
Это показано в интерфейсе Tulip Connector Function ниже:
![Working with SOAP and XML APIs_229803470.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/Working%20with%20SOAP%20and%20XML%20APIs_229803470.png){height="" width=""}
## Разбор XML-данных в Tulip
### Простой пример API
Начнем с простого примера ответа от XML API.
xml version="1.0" encoding="UTF-8"?
Повседневная итальянская кухня
Джада Де Лаурентис
2005
30.00
Гарри Поттер
Дж. К. Роулинг
2005
29.99
Изучаем XML
Эрик Т. Рэй
2003
39.95
Следующие примеры показывают, как получить доступ к различным частям информации в Tulip.
Извлекатель из:
`/bookstore/book[1]/title`
возвращает:
`<title lang="en">Повседневный итальянский</title>.`
Обратите внимание, что массивы в XML "1-индексированы", т.е. первый элемент находится в позиции "1", в отличие от {{glossary.JSON}}-запроса, который "0-индексирован".
Экстрактор из:
`/bookstore/book[1]/title/text()`
возвращает:
`Everyday Italian`
Обратите внимание, что функция `/text()` используется для извлечения текстового значения, содержащегося в выбранном узле.
Экстрактор из:
`/bookstore/book[@category="children"][1]/title/text()`
возвращает:
`Гарри Поттер`
Обратите внимание, что селектор позволил нам осуществлять поиск внутри свойств узла.
Эти примеры могут быть непосредственно использованы в Tulip, как показано ниже:
![](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/Working%20with%20SOAP%20and%20XML%20APIs_229776239.png)
### Пример SOAP API
Теперь рассмотрим более сложный случай с использованием пространств имен, характерных для SOAP API.
``` <soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
>
>
>
>
>
>
>
>
> 0
>
>
>
>
>
> информация получена успешно
>
>
>
>
>
>
>
> Моя операция
>
> Нет
>
> 1234567-890
>
> B
>
>
>
>
>
>
>
> PartNumber
>
> 1234567-890
>
>
>
>
>
> PartRevision
>
> B
>
>
>
>
>
> PartDescription
>
> Мой пример детали
>
>
>
>
>
>
>
> Обычный
>
>
>
>
>
>
>
>
>
>
>
>
> ```
>
>
>
В этом ответе используются пространства имен XML, что создает дополнительные сложности. В большинстве случаев глобальный поиск с использованием операторов `//*` и `.//*` делает извлечение очень простым.
Экстрактор из:
`//*[local-name()="propertyName"][1]/text()`
возвращает:
`PartNumber .`
Обратите внимание, что массивы в XML "1-индексированы", т.е. первый элемент находится в позиции "1", в отличие от json-запроса, который "0-индексирован".
Экстрактор из:
`//*[local-name()="Property"]`
возвращает:
`<Property xmlns="http://getInfo.mes.myexample.com"> <propertyName>PartNumber</propertyName> <propertyValue>1234567-890</propertyValue> </Property> <Property xmlns="http://getInfo.mes.myexample.com"> <propertyName>PartRevision</propertyName> <propertyValue>B</propertyValue> </Property> <Property xmlns="http://getInfo.mes.myexample.com"> <propertyName>PartDescription</propertyName> <propertyValue>Мой пример части</propertyValue> </Property>`
Обратите внимание, что пространства имен "спускаются" в этот результат. Поэтому в подзапросе все равно будет выполняться поиск в глобальном пространстве имен.
Чтобы извлечь массив объектов, используйте глобальный поиск, показанный в предыдущем примере, для извлечения массива, а затем экстрактор локального поиска вида:
`.//*[local-name()="propertyName"]/text()`
для получения массива объектов вида:
`[ { "Name": "PartNumber"
"Value": "1234567-890" }, { "Name": "PartRevision"
"Value": "B"
}, { "Name": "PartDescription".
"Value": "Мой пример части"
}
]`
Эти примеры показаны в интерфейсе Tulip Connectors ниже:
![](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/Working%20with%20SOAP%20and%20XML%20APIs_229781522.png)
---
Вы нашли то, что искали?
Вы также можете зайти на [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all), чтобы задать свой вопрос или узнать, сталкивались ли другие с подобным вопросом!
Была ли эта статья полезной?