azure 无法在ADF中转换XML查询

5w9g7ksd  于 2023-05-29  发布在  其他
关注(0)|答案(2)|浏览(180)

有一个set变量保存下面的值,它是字符串类型。

{
    "variableName": "test",
    "value": "<?xml version=\"1.0\" encoding=\"utf-8\"?> <fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\" aggregate=\"true\" distinct=\"false\"> <entity name=\"account\"> <attribute name=\"ownerid\" alias=\"account\" aggregate=\"count\" /> <filter type=\"and\"> <condition attribute=\"ownerid\" operator=\"not-null\" /> </filter> <link-entity name=\"team\" from=\"teamid\" to=\"owningteam\" link-type=\"inner\" alias=\"ae\"> <filter type=\"and\"> <condition attribute=\"teamtype\" operator=\"eq\" value=\"0\" /> <condition attribute=\"name\" operator=\"like\" value=\"%xyz%\" /> </filter> </link-entity> </entity> </fetch>"
}

现在,在传递下面的xml时,我使用下面的replace函数删除\
@xml(replace(variables('test'),'\', '' ))
但它给出了以下错误:
ErrorCode=UserErrorInvalidValueInPayload,'Type =Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=未能将“query”属性中的值转换为“System.String”类型。请确保有效负载结构和值正确。,Source=Microsoft.DataTransfer.DataContracts,''Type=System.InvalidCastException,Message=Object must implement IConvertible.,Source=mscorlib,'
已尝试使用替换功能。

nhjlsmyf

nhjlsmyf1#

请注意,在你的值\中有转义字符来转义双引号(“)。当你在activity的输出json中看到任何数据时,如果有任何双引号,那么它会使用\作为转义字符来表示它。但实际上,这并不是你价值的一部分。
关于你的表达式`@xml(replace(variables('test'),'',''))。
在这里,你试图用empty替换empty,这意味着什么都不会改变,而且你正在使用返回值作为xml()函数的输入。XML函数输入不应是XML字符串。它应该是不同类型的字符串,然后可以转换为XML。
例如,在下面的示例中,我使用json字符串作为XML()函数的输入。因此,它最终能够从中生成XML。
xml(json('{“name”:“Sophia Owen”}'))
输出:Sophia Owen

gcuhipw9

gcuhipw92#

我试图在我的环境中复制您的问题,给出以下值作为设置变量值

<?xml version="1.0" encoding="utf-8"?> <fetch version="1.0" output-format="xml-platform" mapping="logical" aggregate="true" distinct="false"> <entity name="account"> <attribute name="ownerid" alias="account" aggregate="count" /> <filter type="and"> <condition attribute="ownerid" operator="not-null" /> </filter> <link-entity name="team" from="teamid" to="owningteam" link-type="inner" alias="ae"> <filter type="and"> <condition attribute="teamtype" operator="eq" value="0" /> <condition attribute="name" operator="like" value="%xyz%" /> </filter> </link-entity> </entity> </fetch>

我试图通过设置变量值与您的表达式作为额外的列值

@xml(replace(variables('xml'),'\', '' ))

我得到了下面的错误:

在ADF中,'\'用于将值作为字符串提及,因此无需删除反斜杠('\')输出仅显示为'\',但它只能将其作为提供的格式。可以直接将变量值传递给附加列。为了您的澄清,您可以检查字符串长度两者是否相等。我用@string(length(variables('xml')))创建了set变量strlen来查找上面的xml长度,我得到了下面的输出:

我将上面的xml数据复制到csv文件中,方法是在我需要的目的地添加带有表达式@variables('xml')的附加列。

为了找到上面的长度,我添加了上面的文件作为源数据,并使用length(xml)创建了派生列,我得到了下面的输出:

因此,无需删除'\',您可以直接传递变量值。

相关问题