我有一个xml文档,它有一堆兄弟记录,我正在尝试获取兄弟的值



我有一个

我的XML:

<Transaction>
<Record Name = "SENDER" RecNum = "1">
<Segment_Tag>SENDER</Segment_Tag>
<SENDER01>5499953664103</SENDER01>
<SENDER02>UTILMD</SENDER02>
</Record>
<Record Name = "BGM" RecNum = "2">
<Segment_Tag>BGM</Segment_Tag>
<BGM01>E44</BGM01>
<BGM03>260</BGM03>
<BGM05>SIS20170802181883607</BGM05>
<BGM06>9</BGM06>
<BGM07>NA</BGM07>
</Record>
<Record Name = "DTM" RecNum = "3">
<Segment_Tag>DTM</Segment_Tag>
<DTM01>137</DTM01>
<DTM02>201708021227</DTM02>
<DTM03>203</DTM03>
</Record>
<Record Name = "DTM" RecNum = "4">
<Segment_Tag>DTM</Segment_Tag>
<DTM01>735</DTM01>
<DTM02>+0100</DTM02>
<DTM03>406</DTM03>
</Record>
<Record Name = "MKS" RecNum = "5">
<Segment_Tag>MKS</Segment_Tag>
<MKS01>23</MKS01>
</Record>
<Record Name = "NAD" RecNum = "6">
<Segment_Tag>NAD</Segment_Tag>
<NAD01>MR</NAD01>
<NAD02>5499953664103</NAD02>
<NAD04>9</NAD04>
</Record>
<Record Name = "NAD" RecNum = "7">
<Segment_Tag>NAD</Segment_Tag>
<NAD01>MS</NAD01>
<NAD02>5414490000504</NAD02>
<NAD04>9</NAD04>
</Record>
<Record Name = "IDE" RecNum = "8">
<Segment_Tag>IDE</Segment_Tag>
<IDE01>24</IDE01>
<IDE02>SIS20170802181883607</IDE02>
<Record Name = "IDEDTM" RecNum = "9">
<Segment_Tag>IDEDTM</Segment_Tag>
<DTM201>97</DTM201>
<DTM202>201708012300</DTM202>
<DTM203>203</DTM203>
</Record>
<Record Name = "STS" RecNum = "10">
<Segment_Tag>STS</Segment_Tag>
<STS01>7</STS01>
<STS02>64</STS02>
<STS05>BA5</STS05>
<STS06>BEL</STS06>
<STS07>260</STS07>
</Record>
<Record Name = "LOC" RecNum = "11">
<Segment_Tag>LOC</Segment_Tag>
<LOC01>172</LOC01>
<LOC02>541449020703505315</LOC02>
<LOC04>9</LOC04>
</Record>
<Record Name = "IDERFF" RecNum = "12">
<Segment_Tag>IDERFF</Segment_Tag>
<RFF01>TN</RFF01>
<RFF02>281945</RFF02>
</Record>
<Record Name = "IDENAD" RecNum = "13">
<Segment_Tag>IDENAD</Segment_Tag>
<NAD101>DDQ</NAD101>
<NAD102>5425037700016</NAD102>
<NAD104>9</NAD104>
</Record>
</Record>
<Record Name = "BGM" RecNum = "14">
<Segment_Tag>BGM</Segment_Tag>
<BGM01>414</BGM01>
<BGM05>ARI20170802225703376</BGM05>
<BGM06>9</BGM06>
<BGM07>NA</BGM07>
</Record>
<Record Name = "DTM" RecNum = "15">
<Segment_Tag>DTM</Segment_Tag>
<DTM01>137</DTM01>
<DTM02>201708021228</DTM02>
<DTM03>203</DTM03>
</Record>
<Record Name = "DTM" RecNum = "16">
<Segment_Tag>DTM</Segment_Tag>
<DTM01>735</DTM01>
<DTM02>+0100</DTM02>
<DTM03>406</DTM03>
</Record>
<Record Name = "MKS" RecNum = "17">
<Segment_Tag>MKS</Segment_Tag>
<MKS01>23</MKS01>
</Record>
<Record Name = "NAD" RecNum = "18">
<Segment_Tag>NAD</Segment_Tag>
<NAD01>MR</NAD01>
<NAD02>5499953664103</NAD02>
<NAD04>9</NAD04>
</Record>
<Record Name = "NAD" RecNum = "19">
<Segment_Tag>NAD</Segment_Tag>
<NAD01>MS</NAD01>
<NAD02>5414490000504</NAD02>
<NAD04>9</NAD04>
</Record>
<Record Name = "IDE" RecNum = "20">
<Segment_Tag>IDE</Segment_Tag>
<IDE01>24</IDE01>
<IDE02>ARI20170802225703376</IDE02>
<Record Name = "IDEDTM" RecNum = "21">
<Segment_Tag>IDEDTM</Segment_Tag>
<DTM201>92</DTM201>
<DTM202>201707142300</DTM202>
<DTM203>203</DTM203>
</Record>
<Record Name = "STS" RecNum = "22">
<Segment_Tag>STS</Segment_Tag>
<STS01>E01</STS01>
<STS03>260</STS03>
<STS04>39</STS04>
<STS05>E35</STS05>
<STS07>260</STS07>
</Record>
<Record Name = "LOC" RecNum = "23">
<Segment_Tag>LOC</Segment_Tag>
<LOC01>172</LOC01>
<LOC02>541449060016130774</LOC02>
<LOC04>9</LOC04>
</Record>
<Record Name = "IDERFF" RecNum = "24">
<Segment_Tag>IDERFF</Segment_Tag>
<RFF01>TN</RFF01>
<RFF02>172140000045770</RFF02>
</Record>
<Record Name = "IDECCI" RecNum = "25">
<Segment_Tag>IDECCI</Segment_Tag>
<CCI02>E14</CCI02>
<CCI04>260</CCI04>
<Record Name = "IDECAV" RecNum = "26">
<Segment_Tag>IDECAV</Segment_Tag>
<CAV01>B18</CAV01>
<CAV02>BEL</CAV02>
<CAV03>260</CAV03>
</Record>
</Record>
<Record Name = "IDENAD" RecNum = "27">
<Segment_Tag>IDENAD</Segment_Tag>
<NAD101>IT</NAD101>
<NAD111>RUE JOSEPH DECOOMAN</NAD111>
<NAD112>89 221</NAD112>
<NAD115>GREZ-DOICEAU</NAD115>
<NAD116>1390</NAD116>
<NAD117>BE</NAD117>
</Record>
</Record>
</Transaction>

我的代码:

<xsl:for-each select="Transaction/Record[@Name='IDE']" >
<xsl:choose>
<xsl:when test="../Record[@Name='BGM']/BGM01.='414'">
<xsl:call-template name="ChangeResponse"/>
</xsl:when>
<xsl:when test="../Record[@Name='BGM']/BGM01.='406'">
<xsl:call-template name="DropRequest"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>

问题是BGM和IDE是兄弟节点,当IDE是我的当前节点时,我需要转到父节点以获取BGM记录,这导致只返回第一个BGM值。我正试图找到一种方法来获得直接位于IDE值之前的BGM值。我尝试使用前面的同级,但它先查看前面的IDE值,然后再查看之前的BGM值。我需要呆在每个IDE的当前节点中,然后评估前一个BGM的值,但BGM是IDE的兄弟,所以当我在IDE启动时,不确定如何使用xpath来获得BGM。

xsl:for-each select="Transaction/Record[@Name='IDE']"内部,您应该能够使用preceding-sibling::Record[@Name = 'BGM'][1]找到从当前Record开始的第一个这样的前一个同级。因此,在Record Name = "IDE" RecNum = "8"的示例中,它将选择Record Name = "BGM" RecNum = "2"

最新更新