Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Azure数据工厂将XML元素读入变量_Xml_Azure Data Factory - Fatal编程技术网

如何使用Azure数据工厂将XML元素读入变量

如何使用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

我正在尝试使用Azure数据工厂从API读取数据。首先,我需要调用一个log-in方法,该方法提供XML响应。我需要从XML中获取一个元素,并将其放入下一个API调用中,以获取所需的数据

目前,我正在使用copydata工具调用login方法并将XML保存到blob存储中。现在如何将该XML的元素读入变量

如果有更好的方法,请提供建议,但我仍然想知道如何将XML元素读入变量

编辑:这是返回的XML。我需要捕获会话ID

<?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部分

我在这里创建了一个简单的测试:

  • 我正在使用查找活动获取xml文件,您应该用web活动替换。我声明了两个字符串变量
    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可以轻松地读入变量。我把它添加到我的答案中。这可能对其他社区成员有益。