如何按照计划代码的顺序获取每个元素值

问题描述 投票:0回答:1

我需要表行应按照代码值的顺序获取

输入我有的xml:

<Group>
    <Maps>
        <Map>
            <Code>20000</Code>
        </Map>
        <Map>
            <Code>30000</Code>
        </Map>
    </Maps>
    <Details>
        <Detail>
            <Code>30000</Code>
            <Description>Benefit</Description>
        </Detail>
        <Detail>
            <Code>20000</Code>
            <Description>Non-Benefit</Description>
        </Detail>
    </Details>
</Group>

XSL 我已经使用变量尝试了以下操作:

<xsl:template match="Group">
      <xsl:variable name="MapCode" select="Maps/Map/Code"/>
      <row>
         <entry>Code</entry>
         <xsl:for-each select="Maps/Map">
            <entry>
               <p>
                  <xsl:value-of select="Code"/>
               </p>
            </entry>
         </xsl:for-each>
      </row>
      <row>
         <entry>Level</entry>
         <xsl:for-each select="Details/Detail[Code=$MapCode]">
            <entry>
               <p>
                  <xsl:value-of select="Description"/>
               </p>
            </entry>
         </xsl:for-each>
      </row>
      </xsl:template>

我得到的实际输出:

 <row>
      <entry>Code</entry>
      <entry>
         <p>20000</p>
      </entry>
      <entry>
         <p>30000</p>
      </entry>
   </row>
   <row>
      <entry>Level</entry>
      <entry>
         <p>Benefit</p>
      </entry>
      <entry>
         <p>Non-Benefit</p>
      </entry>
   </row>

预期输出应该是:

 <row>
      <entry>Code</entry>
      <entry>
         <p>20000</p>
      </entry>
      <entry>
         <p>30000</p>
      </entry>
   </row>
   <row>
      <entry>Level</entry>
      <entry>
         <p>Non-Benefit</p>
      </entry>
      <entry>
         <p>Benefit</p>
      </entry>
   </row>

根据

Code
订单匹配,应选择
Description
值。我将变量用于
Code
匹配。但它仍然错误地选择了
Description
值。所以描述应该按照代码顺序选择。

xml xslt xslt-2.0
1个回答
0
投票

我猜你想做类似的事情:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:key name="detail-by-code" match="Detail" use="Code" />

<xsl:template match="/Group">
    <xsl:variable name="headings" select="Maps/Map" />
    <table>
        <!-- header -->
        <row>
            <xsl:for-each select="$headings">
                <entry>
                    <p>
                        <xsl:value-of select="Code"/>
                    </p>
                </entry>
            </xsl:for-each>
        </row>
        <!-- data -->
        <xsl:for-each select="Details">
            <xsl:variable name="current-row" select="." />
            <row>
                <xsl:for-each select="$headings">
                    <entry>
                        <p>
                            <xsl:value-of select="key('detail-by-code', Code, $current-row)"/>
                        </p>
                    </entry>
                </xsl:for-each>
            </row>
        </xsl:for-each>
    </table>
</xsl:template>

</xsl:stylesheet>
© www.soinside.com 2019 - 2024. All rights reserved.