循環的 XSLT 排序不起作用

普拉卡什

我的 XSLT 類型的節點不工作,請檢查我的 xsl 有什麼問題。我只能使用 xslt 1.0。

輸入 XML 文件

<?xml version="1.0" encoding="UTF-8"?>
<ST_Loop>
    <S5_Loop>
        <S5>
            <S501>1</S501>
            <S502>LD</S502>
        </S5>
        <G62>
            <G6202>20210929</G6202>
            <G6204>010000</G6204>
        </G62>
        <N1_Loop>
            <N1>
                <N101>Milford</N101>
            </N1>
            <N3>
                <N301>49 Sumner St</N301>
            </N3>
            <N4>
                <N401>Worcester</N401>
                <N403>01757-1656</N403>
                <N404>US</N404>
            </N4>
        </N1_Loop>
        <OID_Loop/>
    </S5_Loop>
    <S5_Loop>
        <S5>
            <S501>3</S501>
            <S502>LD</S502>
        </S5>
        <G62/>
        <N1_Loop>
            <N1>
                <N101>MOISON ACE HDWE OF BEDFORD LLC</N101>
            </N1>
            <N3>
                <N301>297 Great Rd</N301>
            </N3>
            <N4>
                <N401>Middlesex</N401>
                <N403>01730-2802</N403>
                <N404>US</N404>
            </N4>
        </N1_Loop>
        <OID_Loop/>
    </S5_Loop>
    <S5_Loop>
        <S5>
            <S501>5</S501>
            <S502>LD</S502>
        </S5>
        <G62/>
        <N1_Loop>
            <N1>
                <N101>WATERS &amp; BROWN, INC.        02</N101>
            </N1>
            <N3>
                <N301>13 Elliott St</N301>
            </N3>
            <N4>
                <N401>Essex</N401>
                <N403>01915-3308</N403>
                <N404>US</N404>
            </N4>
        </N1_Loop>
        <OID_Loop/>
    </S5_Loop>
    <S5_Loop>
        <S5>
            <S501>2</S501>
            <S502>UL</S502>
        </S5>
        <G62>
            <G6202>20210929</G6202>
            <G6204>040000</G6204>
        </G62>
        <LAD/>
        <N1_Loop>
            <N1>
                <N101>ST</N101>
                <N102>MOISON ACE HDWE OF BEDFORD LLC</N102>
            </N1>
            <N3>
                <N301>297 Great Rd</N301>
            </N3>
            <N4>
                <N401>Bedford</N401>
                <N402>MA</N402>
                <N403>01730-2802</N403>
                <N404>US</N404>
            </N4>
        </N1_Loop>
    </S5_Loop>
    <S5_Loop>
        <S5>
            <S501>4</S501>
            <S502>UL</S502>
        </S5>
        <G62>
            <G6202>20210929</G6202>
            <G6204>040000</G6204>
        </G62>
        <LAD/>
        <N1_Loop>
            <N1>
                <N101>ST</N101>
                <N102>WATERS &amp; BROWN, INC.        02</N102>
            </N1>
            <N3>
                <N301>13 Elliott St</N301>
            </N3>
            <N4>
                <N401>Beverly</N401>
                <N402>MA</N402>
                <N403>01915-3308</N403>
                <N404>US</N404>
            </N4>
        </N1_Loop>
    </S5_Loop>
    <S5_Loop>
        <S5>
            <S501>6</S501>
            <S502>UL</S502>
        </S5>
        <G62>
            <G6202>20210929</G6202>
            <G6204>040000</G6204>
        </G62>
        <LAD/>
        <N1_Loop>
            <N1>
                <N101>ST</N101>
                <N102>HOME DECOR GROUP            03</N102>
            </N1>
            <N3>
                <N301>450 Paradise Rd</N301>
            </N3>
            <N4>
                <N401>Swampscott</N401>
                <N402>MA</N402>
                <N403>01907-1300</N403>
                <N404>US</N404>
            </N4>
        </N1_Loop>
    </S5_Loop>
</ST_Loop>

XSLT 文件:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
 
 <xsl:template match="/ST_Loop/S5_Loop">
    <xsl:copy>
      <xsl:apply-templates>
         <xsl:sort data-type="number" select="/ST_Loop/S5_Loop/S5/S501"/>
         </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>           

我想要的輸出(根據 S501 值對 S5_Loop 進行排序)

<?xml version="1.0" encoding="UTF-8"?>
<ST_Loop>
   <S5_Loop>
      <S5>
         <S501>1</S501>
         <S502>LD</S502>
      </S5>
      <G62>
         <G6202>20210929</G6202>
         <G6204>010000</G6204>
      </G62>
      <N1_Loop>
         <N1>
            <N101>Milford</N101>
         </N1>
         <N3>
            <N301>49 Sumner St</N301>
         </N3>
         <N4>
            <N401>Worcester</N401>
            <N403>01757-1656</N403>
            <N404>US</N404>
         </N4>
      </N1_Loop>
      <OID_Loop />
   </S5_Loop>
   <S5_Loop>
      <S5>
         <S501>2</S501>
         <S502>UL</S502>
      </S5>
      <G62>
         <G6202>20210929</G6202>
         <G6204>040000</G6204>
      </G62>
      <LAD />
      <N1_Loop>
         <N1>
            <N101>ST</N101>
            <N102>MOISON ACE HDWE OF BEDFORD LLC</N102>
         </N1>
         <N3>
            <N301>297 Great Rd</N301>
         </N3>
         <N4>
            <N401>Bedford</N401>
            <N402>MA</N402>
            <N403>01730-2802</N403>
            <N404>US</N404>
         </N4>
      </N1_Loop>
   </S5_Loop>
   <S5_Loop>
      <S5>
         <S501>3</S501>
         <S502>LD</S502>
      </S5>
      <G62 />
      <N1_Loop>
         <N1>
            <N101>MOISON ACE HDWE OF BEDFORD LLC</N101>
         </N1>
         <N3>
            <N301>297 Great Rd</N301>
         </N3>
         <N4>
            <N401>Middlesex</N401>
            <N403>01730-2802</N403>
            <N404>US</N404>
         </N4>
      </N1_Loop>
      <OID_Loop />
   </S5_Loop>
   <S5_Loop>
      <S5>
         <S501>4</S501>
         <S502>UL</S502>
      </S5>
      <G62>
         <G6202>20210929</G6202>
         <G6204>040000</G6204>
      </G62>
      <LAD />
      <N1_Loop>
         <N1>
            <N101>ST</N101>
            <N102>WATERS &amp; BROWN, INC.        02</N102>
         </N1>
         <N3>
            <N301>13 Elliott St</N301>
         </N3>
         <N4>
            <N401>Beverly</N401>
            <N402>MA</N402>
            <N403>01915-3308</N403>
            <N404>US</N404>
         </N4>
      </N1_Loop>
   </S5_Loop>
   <S5_Loop>
      <S5>
         <S501>5</S501>
         <S502>LD</S502>
      </S5>
      <G62 />
      <N1_Loop>
         <N1>
            <N101>WATERS &amp; BROWN, INC.        02</N101>
         </N1>
         <N3>
            <N301>13 Elliott St</N301>
         </N3>
         <N4>
            <N401>Essex</N401>
            <N403>01915-3308</N403>
            <N404>US</N404>
         </N4>
      </N1_Loop>
      <OID_Loop />
   </S5_Loop>
   <S5_Loop>
      <S5>
         <S501>6</S501>
         <S502>UL</S502>
      </S5>
      <G62>
         <G6202>20210929</G6202>
         <G6204>040000</G6204>
      </G62>
      <LAD />
      <N1_Loop>
         <N1>
            <N101>ST</N101>
            <N102>HOME DECOR GROUP            03</N102>
         </N1>
         <N3>
            <N301>450 Paradise Rd</N301>
         </N3>
         <N4>
            <N401>Swampscott</N401>
            <N402>MA</N402>
            <N403>01907-1300</N403>
            <N404>US</N404>
         </N4>
      </N1_Loop>
   </S5_Loop>
</ST_Loop>
michael.hor257k

代替:

 <xsl:template match="/ST_Loop/S5_Loop">
    <xsl:copy>
      <xsl:apply-templates>
         <xsl:sort data-type="number" select="/ST_Loop/S5_Loop/S5/S501"/>
         </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

做:

<xsl:template match="/ST_Loop">
    <xsl:copy>
        <xsl:apply-templates>
            <xsl:sort data-type="number" select="S5/S501"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>

即匹配要排序的節點元素,並將模板應用於元素,使用排序鍵相對路徑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章