使用 SOAP 和 XML 应用程序接口
  • 31 Oct 2023
  • 1 分钟阅读
  • 贡献者

使用 SOAP 和 XML 应用程序接口


文章摘要

概述

使用基于 XML 的应用程序接口的提示和技巧指南

Tulip 连接器可用于与多种类型的外部数据源交互。本文重点介绍使用XML 交换信息的 HTTP API。这一类包括SOAPAPI。

在 Tulip 中发送 XML 数据

要在请求正文中发送 XML 内容,请使用$value$符号表示应插入参数。

例如,在请求正文字段中输入以下内容:


 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 函数界面中有所显示:


![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=""}


## 在 Tulip 中解析 XML 数据


### 一个简单的 API 示例


让我们从 XML API 的一个简单响应示例开始。


xml version="1.0" encoding="UTF-8"?

日常意大利语

Giada De Laurentiis

2005

30.00

哈利-波特

J K. 罗琳

2005

29.99

学习 XML

埃里克-T-雷

2003

39.95



以下示例展示了如何访问 Tulip 中的各种信息。


一个提取器


`/bookstore/book[1]/title`


返回:


`<title lang="en">每日意大利语</title>。`


请注意,XML 中的数组是 "1-索引 "的,即第一个元素位于 "1 "的位置,而 {{glossary.JSON}}-query 是 "0-索引 "的。


提取器为


`/bookstore/book[1]/title/text()`


返回:


`日常意大利语`


请注意,`/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  
> 
>   
> 
>   
> 
>   
> 
> 零件编号  
> 
> 1234567-890  
> 
>   
> 
>   
> 
> 部件修订  
> 
> B  
> 
>   
> 
>   
> 
> 零件描述  
> 
> 我的示例零件  
> 
>   
> 
>   
> 
>   
> 
> 正常  
> 
>   
> 
>   
> 
>   
> 
>   
> 
>   
> 
> 
> ```
> 
> 
> 


此响应使用 XML 命名空间,增加了复杂性。在大多数情况下,使用`//*`和`.//*`操作符进行全局搜索会使提取非常简单。


提取器为


`//*[local-name()="propertyName"][1]/text()`


返回:


`零件编号`


请注意,XML 中的数组是 "1-索引 "的,即第一个元素位于 "1 "的位置,而 json-query 是 "0-索引 "的。


提取器为


`//*[本地名称()="属性"]`


返回


`<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>部件描述</propertyName> <propertyValue>我的示例部件</propertyValue> </Property>。`


请注意,命名空间被 "下拉 "到这个结果中。因此,子查询仍将搜索全局名称空间。


要提取对象数组,可使用前面示例中的全局搜索来提取数组,然后使用本地搜索提取器:


`.//*[local-name()="propertyName"]/text()`


形式的对象数组:


`[ { "名称":"部件编号 
 "值": "1234567-890" }"1234567-890" }, { "Name":"零件修订版" 
 "值": "B"B" 
 }, { "名称":"部件描述" 
 "值":"我的示例零件" 
 } 
]`


这些示例显示在下面的郁金香连接器界面中:


![](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)发布您的问题,或查看其他人是否遇到过类似问题!


本文对您有帮助吗?