我有一个问题,请考虑以下 XML:
<?xml version="1.0" encoding="UTF-16"?>
<APIDATA xmlns="api-com">
<ORDER EngineID="1" OrderID="66" OtherInfo="yes"><INSTSPECIFIER InstID="27" SeqID="17"/>
</ORDER>
<ORDER EngineID="2" OrderID="67" OtherInfo="yes"><INSTSPECIFIER InstID="28" SeqID="18"/>
</ORDER>
<ORDER EngineID="3" OrderID="68"><INSTSPECIFIER InstID="29" SeqID="19"/></ORDER>
</APIDATA>
我必须与 SSIS 合作。我想在所有订单条目的每个循环中获取所有数据到 SSIS 变量。到目前为止,我可以在 SSIS 的控制流中使用 ForeachLoop 获取数据,其中包括:
EnumerationType: ElementCollection
OuterXPathString: //*[name() = 'ORDER']
InnerElementType: NodeText
InnerXPathString: @*[name() = 'EngineID'] | @*[name() = 'OrderID'] | child::node()/@*[name() = 'InstID'] | child::node()/@*[name() = 'SeqID']
我怎样才能以这种方式获取 OtherInfo 数据,即使节点不存在,它也总是会返回一些东西?例如,如果节点不存在,则返回“No”。
在讨论方面,我需要这个,因为 SSIS 映射在结果集上使用整数索引。如果结果集可以是 4 或 5 长,我会得到 index out of bounds 错误。这是我规避问题的想法,始终返回固定长度的结果集。
如果无法做到这一点,另一个想法是使用默认值扩展 XML。因此,如果另一个问题是:您能告诉我,如何使用 XPATH 将默认值添加到 XML 中吗?示例:将上述 XML 设置为:
<?xml version="1.0" encoding="UTF-16"?>
<APIDATA xmlns="api-com">
<ORDER EngineID="1" OrderID="66" OtherInfo="yes"><INSTSPECIFIER InstID="27" SeqID="17"/>
</ORDER>
<ORDER EngineID="2" OrderID="67" OtherInfo="yes"><INSTSPECIFIER InstID="28" SeqID="18"/>
</ORDER>
<ORDER EngineID="3" OrderID="68" OtherInfo="defaultvalue"><INSTSPECIFIER InstID="29" SeqID="19"/></ORDER>
</APIDATA>
或者在 SSIS 中有没有更优雅的方法来解决这个问题?