[英]How do I fill absent on all days in an array till now which are not having the “Present” Element?
[英]How do I now read an element of that XML into a variable
我現在如何將 XML 的一個元素讀取到一個變量中,我正在嘗試使用 Azure 數據工廠從 API 讀取數據。 首先我需要調用一個登錄方法,它提供了一個 XML 響應。 我需要從 XML 中取出一個元素並將其放入我的下一個 API 調用中以獲取我需要的數據。
目前,我正在使用復制數據工具調用登錄方法並將 XML 保存到數據湖存儲。 我現在如何將 XML 的元素讀入變量?
如果有更好的方法,請提出建議,但我仍然想知道如何將 XML 元素讀入變量。 我需要傳遞 sp id,mac_add,interface 作為輸入來調用下一個 api 同時將加載 json 格式的其他文件
這是 xml
<?xml version="1.0" encoding="UTF-8"?>
<anp:anp_sp_list xmlns:anp="http://www.soap.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1"
xsi:schemaLocation="http://www.soap.com anp_sp_list.xsd">
<sp id="5152">
<controller_id>107</controller_id>
<folder id="1">Top</folder>
<group id="7">Cisco AP</group>
<mac_add>45:2B:01:DB:FA:S6</mac_add>
<mfgr>Cisco</mfgr>
<model id="264">WEN</model>
<id index="1">
<antenna />
<antenna_gain />
<enabled>true</enabled>
<operational_mode>n</operational_mode>
<interface>0</interface>
</id>
<id index="2">
<antenna />
<antenna_gain />
<enabled>true</enabled>
<operational_mode>N</operational_mode>
<interface>1</interface>
</id>
<id index="3">
<antenna />
<antenna_gain />
<enabled>true</enabled>
<operational_mode>n</operational_mode>
<interface>2</interface>
</id>
</sp>
<sp id="5251">
<controller_id>07</controller_id>
<folder id="1">Top</folder>
<group id="7">AP</group>
<mac_add>99:2B:01:DB:AF:S6</mac_add>
<mfgr>sco</mfgr>
<model id="264">WEN</model>
<id index="3">
<antenna />
<antenna_gain />
<enabled>true</enabled>
<operational_mode>n</operational_mode>
<interface>1</interface>
</id>
<id index="5">
<antenna />
<antenna_gain />
<enabled>true</enabled>
<operational_mode>N</operational_mode>
<interface>4</interface>
</id>
<id index="3">
<antenna />
<antenna_gain />
<enabled>true</enabled>
<operational_mode>n</operational_mode>
<interface>8</interface>
</id>
</sp>
</anp:anp_sp_list>
可以使用通常的點和數組語法從核心 Azure 數據工廠 (ADF) 中的 XML 查詢值。 在我的簡單示例中,我在數據湖中有一個文件,我通過查找將其加載到管道中。 然后我使用以下表達式從 xml 獲取值:
設置變量 spId
@string(activity('Lookup1').output.firstRow['anp:anp_sp_list'].sp[0]['@id'])
設置變量 varMac
@string(activity('Lookup1').output.firstRow['anp:anp_sp_list'].sp[0].mac_add)
設置變量 varInterface
@string(activity('Lookup1').output.firstRow['anp:anp_sp_list'].sp[0].id[0].interface)
這適用於簡單的 xml。 在這里,我使用[0]
語法獲取第一個sp
元素和第一個interface
元素。 請注意 xml 屬性的@
語法。 問題是您的示例 XML 具有多個sp
屬性,它們又具有多個id
元素(其中包含interface
元素),因此我認為您需要對預期結果更加清楚。 可以使用For Each
活動循環遍歷多個sp
元素,但您需要一個子 package 再次循環遍歷內部 id。 您最好將 xml 轉換為 flat.csv 並在查找中使用它。
如果在 ADF 中執行起來太復雜,您可以將問題轉移到其他一些計算上,例如 Azure SQL DB 非常有能力使用 XML 數據流或用於低經驗數據。 Azure SQL DB 中使用其內置 XML 功能的簡單示例:
;WITH XMLNAMESPACES ( 'http://www.soap.com' AS anp )
SELECT
sp.c.value('(@id)[1]', 'INT') spId,
sp.c.value('(mac_add)[1]', 'VARCHAR(30)') mac_add,
id.c.value('(@index)[1]', 'INT') idIndex,
id.c.value('(interface)[1]', 'VARCHAR(30)') interface
FROM @xml.nodes('anp:anp_sp_list/sp') sp(c)
CROSS APPLY sp.c.nodes('id') id(c)
ORDER BY spId, idIndex;
我的結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.