問題があります。次の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を使用する必要があります。すべてのOrderエントリのforeachループですべてのデータをSSIS変数に取得したいと思います。これまでのところ、SSISの制御フローでForeachLoopを使用してデータを取得できます。
EnumerationType: ElementCollection
OuterXPathString: //*[name() = 'ORDER']
InnerElementType: NodeText
InnerXPathString: @*[name() = 'EngineID'] | @*[name() = 'OrderID'] | child::node()/@*[name() = 'InstID'] | child::node()/@*[name() = 'SeqID']
ノードが存在しない場合でも常に何かを返すような方法でOtherInfoデータを取得するにはどうすればよいですか?たとえば、ノードが存在しない場合は、「いいえ」を返します。
ディスカッション側では、SSISマッピングが結果セットに整数インデックスを使用するため、これが必要です。結果セットの長さが4または5の場合、インデックスの範囲外エラーが発生します。これは、問題を回避し、常に固定長の結果セットを返すという私の考えです。
これができない場合、もう1つのアイデアは、デフォルト値で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でこれを解決するためのよりエレガントな方法はありますか?