我有一个xml文档,有一堆兄弟记录,我试图得到兄弟姐妹的价值,当我

时间:2017-10-31 18:17:56

标签: xml xpath elements siblings

我有一个

我的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记录,这只会导致返回第一个B GM值。我试图找到一种方法来获取直接在IDE值之前的BGM值。我尝试使用previous-sibling,但是它会查看前面的IDE值,然后查看之前的BGM值。我需要保持在每个IDE的当前节点内,然后评估以前BGM的值,但BGM是IDE的兄弟,因此不确定当我在IDE启动时如何使用xpath来获取B GM。

1 个答案:

答案 0 :(得分:1)

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"