У меня есть входящий 856, который при декодировании выглядит следующим образом:
<X12_00401_856>
<ST>
<ST01>856</ST01>
<ST02>0339</ST02>
</ST>
<BSN>
<BSN01>00</BSN01>
<BSN02>N975092</BSN02>
<BSN03>20180911</BSN03>
<BSN04>125200</BSN04>
</BSN>
<DTM>
<DTM01>011</DTM01>
<DTM02>20180911</DTM02>
</DTM>
<HLLoop1>
<HL>
<HL01>1</HL01>
<HL03>S</HL03>
<HL04>1</HL04>
</HL>
<N1Loop1>
<N1>
<N101>ST</N101>
<N103>1</N103>
<N104>123456789</N104>
</N1>
</N1Loop1>
</HLLoop1>
<HLLoop1>
<HL>
<HL01>2</HL01>
<HL02>1</HL02>
<HL03>O</HL03>
<HL04>1</HL04>
</HL>
<LIN>
<LIN02>VO</LIN02>
<LIN03>123456</LIN03>
</LIN>
</HLLoop1>
<HLLoop1>
<HL>
<HL01>3</HL01>
<HL02>2</HL02>
<HL03>I</HL03>
<HL04>0</HL04>
</HL>
<LIN>
<LIN02>HN</LIN02>
<LIN03>NH1802</LIN03>
</LIN>
</HLLoop1>
<HLLoop1>
<HL>
<HL01>4</HL01>
<HL02>1</HL02>
<HL03>O</HL03>
<HL04>1</HL04>
</HL>
<LIN>
<LIN02>VO</LIN02>
<LIN03>654321</LIN03>
</LIN>
</HLLoop1>
<HLLoop1>
<HL>
<HL01>5</HL01>
<HL02>4</HL02>
<HL03>I</HL03>
<HL04>0</HL04>
</HL>
<LIN>
<LIN02>HN</LIN02>
<LIN03>NH1803</LIN03>
</LIN>
</HLLoop1>
<HLLoop1>
<HL>
<HL01>6</HL01>
<HL02>4</HL02>
<HL03>I</HL03>
<HL04>0</HL04>
</HL>
<LIN>
<LIN02>HN</LIN02>
<LIN03>NH1803</LIN03>
</LIN>
</HLLoop1>
<CTT>
<CTT01>3</CTT01>
</CTT>
<SE>
<SE01>71</SE01>
<SE02>0339</SE02>
</SE>
</X12_00401_856>
Вот скриншот моей карты:
![enter image description here](https://i.stack.imgur.com/hU21K.png)
Первый сценарий - C #:
public int hlIndex = 0;
public int returnHLOIndex(int hl01, string hl03)
{
if(hl03 == "O")
{
hlIndex = hl01;
}
return hlIndex;
}
Вот XSLT во втором сценарии:
<xsl:template name="X12_00401_856_To_ASN">
<xsl:variable name="BOL" select="//BSN/BSN02"/>
<xsl:variable name="accountNumber"><xsl:value-of select="//HLLoop1[HL/HL03='S']/N1Loop1/N1[N101='ST']/N104"/></xsl:variable>
<xsl:variable name="NetWeight" select="//TD1/TD107"/>
<xsl:element name="EDIFile_Staging_ASNHeader">
<xsl:element name="AccountNumber"><xsl:value-of select="$accountNumber"/></xsl:element>
<!-- -->
<xsl:for-each select="//HLLoop1[HL/HL03='I']">
<xsl:variable name="hloIndex"><xsl:value-of select="userCSharp:returnHLOIndex"/></xsl:variable>
<xsl:variable name="orderNumber"><xsl:value-of select="//HLLoop1[$hloIndex]/LIN/LIN03"/></xsl:variable>
<xsl:element name="EDIFile_Staging_ASNLines">
<xsl:element name="lineNumber"><xsl:value-of select="position()"/></xsl:element>
<xsl:element name="AdvanceShipmentNoteDocuNum"><xsl:value-of select="$BOL"/></xsl:element>
<xsl:element name="AccountNumber"><xsl:value-of select="$accountNumber"/></xsl:element>
<xsl:element name="ASNNumber"><xsl:value-of select="$BOL"/></xsl:element>
<xsl:element name="OrderNumber"><xsl:value-of select="$orderNumber"/></xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
Выходные данные генерируют один цикл детализации для каждого уровня элемента в 856Но мне нужно перенести значение LIN03 с уровня родительского заказа.Эта версия, кажется, только захватывает первое вхождение LIN03 на уровне заказа.Как я могу правильно обратиться к этим значениям уровня заказа?