如何使用Azure数据工厂将XML元素读入变量
我正在尝试使用Azure数据工厂从API读取数据。首先,我需要调用一个log-in方法,该方法提供XML响应。我需要从XML中获取一个元素,并将其放入下一个API调用中,以获取所需的数据 目前,我正在使用copydata工具调用login方法并将XML保存到blob存储中。现在如何将该XML的元素读入变量 如果有更好的方法,请提供建议,但我仍然想知道如何将XML元素读入变量 编辑:这是返回的XML。我需要捕获会话ID如何使用Azure数据工厂将XML元素读入变量,xml,azure-data-factory,Xml,Azure Data Factory,我正在尝试使用Azure数据工厂从API读取数据。首先,我需要调用一个log-in方法,该方法提供XML响应。我需要从XML中获取一个元素,并将其放入下一个API调用中,以获取所需的数据 目前,我正在使用copydata工具调用login方法并将XML保存到blob存储中。现在如何将该XML的元素读入变量 如果有更好的方法,请提供建议,但我仍然想知道如何将XML元素读入变量 编辑:这是返回的XML。我需要捕获会话ID <?xml version="1.0" encodi
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<DoLoginResponse xmlns="http://foo.bar">
<DoLoginResult>
<OperationStatus>true</OperationStatus>
<StatusMessage />
<SecurityProfile>
<User></User>
<Session>
<SessionId>d2cf6ea6-120f-4bff-a5d1-adad9063d9d2</SessionId>
</Session>
<IsFirstLogon>true</IsFirstLogon>
<IsSystemOwner>false</IsSystemOwner>
</SecurityProfile>
</DoLoginResult>
</DoLoginResponse>
</soap:Body>
</soap:Envelope>
真的
d2cf6ea6-120f-4bff-a5d1-adad9063d9d2
真的
假的
解决方案1:
最后,我通过使用查找活动查找连接HTTP链接服务的XML数据集来完成这项工作。返回的XML作为json对象从活动中输出,该对象通常可通过活动('GetSessionID').output.etc访问。然而,一些元素名包含冒号(soap:Envelope和soap:Body),当我将这些元素作为动态内容放入时,Azure数据工厂给了我一个“BadRequest”错误。为了解决这个问题,我将它转换为XML,转换为字符串,去掉冒号,转换回XML,然后转换成json。从那里,我可以像平常一样进入酒店。这是为我提供会话id的动态内容:
@json(xml(替换(字符串(xml(activity('GetSessionID').output.firstRow)),':','')).Envelope.Body.DoLoginResponse.DoLoginResult.SecurityProfile.Session.SessionId
解决方案2: 我认为可以将xml文件的一部分提取到字符串变量中。我的想法是将xml文件转换为字符串,并根据表达式动态提取SessionId部分 我在这里创建了一个简单的测试:
XMLString
和SessionId
:
设置变量1
活动中,添加动态内容@string(活动('Lookup1').output.value[0])
为变量XMLString
赋值。如果您正在使用Web活动,则内容应为@string(活动(“”).output)
。
设置变量2
活动中,添加动态内容@substring(variables('XMLString')、add(indexof(variables('XMLString')、'SessionId')、12)、sub(indexof(variables('XMLString')、'SessionId')、13))
为变量赋值SessionId
。
SessionId
的值如下:最后,我通过使用查找活动查找连接HTTP链接服务的XML数据集来完成这项工作。返回的XML作为json对象从活动中输出,该对象通常可通过
activity('GetSessionID').output.etc访问。然而,一些元素名包含冒号(soap:Envelope和soap:Body),当我将这些元素作为动态内容放入时,Azure数据工厂给了我一个“BadRequest”错误。为了解决这个问题,我将它转换为XML,转换为字符串,去掉冒号,转换回XML,然后转换成json。从那里,我可以像平常一样进入酒店。这是为我提供会话id的动态内容:@json(xml(替换字符串(xml(activity('GetSessionID').output.firstRow)),':','').Envelope.Body.DoLoginResponse.DoLoginResult.SecurityProfile.Session.SessionId
是否要将xml文件的一部分提取到字符串变量中?能否向我们展示一些示例数据以及要提取的部分?我认为ADF不支持这样内联处理xml。一个想法是将XML负载传递给Azure函数,该函数解析XML负载并将其作为JSON返回,JSON可以轻松地读入变量。我把它添加到我的答案中。这可能对其他社区成员有益。