是的,这是可以做到的。如果 API 返回 XML,请确保将 api 调用配置为请求内容类型application/xml
。
然后您可以使用xPath 内置函数。请注意,如果结果超过值与表达式匹配,它将返回一个数组,您可以在其中使用foreach 函数对其进行迭代。我需要运行 Composer 的每晚构建(使用 bot-builder 4.12.0)才能让它为我工作。有关更多信息,请参见此处:
https ://github.com/microsoft/botbuilder-js/pull/3093
这是一个对我有用的例子:
"actions": [
{
"$kind": "Microsoft.SendActivity",
"$designer": {
"id": "rGv7XC"
},
"activity": "${SendActivity_rGv7XC()}"
},
{
"$kind": "Microsoft.HttpRequest",
"$designer": {
"id": "TDA1wO"
},
"method": "GET",
"url": "http://www.geoplugin.net/xml.gp?ip=157.54.54.128",
"resultProperty": "dialog.api_response",
"contentType": "application/xml"
},
{
"$kind": "Microsoft.SetProperty",
"$designer": {
"id": "ipNhfY"
},
"property": "dialog.timezone",
"value": "=xPath(dialog.api_response.content,'/geoPlugin/geoplugin_timezone/text()')"
},
{
"$kind": "Microsoft.SendActivity",
"$designer": {
"id": "DxohEx"
},
"activity": "${SendActivity_DxohEx()}"
}
]
您可以(如果需要/您希望)使用 json 和 jPath 内置函数将 xml 转换为 json,然后进行查询。就像是:
${json(user.testXml)} and then
${jPath(user.testJson , "automobiles")}