Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用姓氏的第一个字母进行XSLT排序_Xslt_Sorting_Xslt 1.0 - Fatal编程技术网

使用姓氏的第一个字母进行XSLT排序

使用姓氏的第一个字母进行XSLT排序,xslt,sorting,xslt-1.0,Xslt,Sorting,Xslt 1.0,我试图修改以下xsl,以便输出与下面所示的所需输出匹配。我正试图按家族首字母的名字按字母顺序对记录进行排序。然而,目前它只按creators首字母排序,我需要它包含editors首字母,其中记录没有creators元素 XML: 这是一个简单的分组问题: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration

我试图修改以下xsl,以便输出与下面所示的所需输出匹配。我正试图按家族首字母的名字按字母顺序对记录进行排序。然而,目前它只按creators首字母排序,我需要它包含editors首字母,其中记录没有creators元素

XML:


这是一个简单的分组问题

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:key name="kWith1stLetter" match="family" use="substring(.,1,1)"/>

 <xsl:template match="/*">
  <xsl:apply-templates select=
  "*/*/*/*/family
             [generate-id()
             =
              generate-id(key('kWith1stLetter',substring(.,1,1))[1])
             ]">
    <xsl:sort select="substring(.,1,1)" />
  </xsl:apply-templates>
 </xsl:template>

 <xsl:template match= "family">
    <h3 class="border">
     <xsl:value-of select="substring(.,1,1)"/>
    </h3>

    <xsl:apply-templates mode="inGroup"
          select="key('kWith1stLetter',substring(.,1,1))"/>
 </xsl:template>

 <xsl:template match="family" mode="inGroup">
  <p><xsl:value-of select="."/></p>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<records>
    <record>
        <creators>
            <item>
                <name>
                    <family>Smith</family>
                    <given>Tim</given>
                </name>
            </item>
        </creators>
    </record>
    <record>
        <creators>
            <item>
                <name>
                    <family>Lambert</family>
                    <given>John</given>
                </name>
            </item>
        </creators>
        <editors>
            <item>
                <name>
                    <family>testEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
    <record>
        <editors>
            <item>
                <name>
                    <family>ZambertEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
</records>
<h3 class="border">L</h3>
<p>Lambert</p>
<h3 class="border">S</h3>
<p>Smith</p>
<h3 class="border">t</h3>
<p>testEDITOR</p>
<h3 class="border">Z</h3>
<p>ZambertEDITOR</p>

史密斯
提姆
兰伯特
约翰
测试员
上下快速移动
赞伯特编辑
上下快速移动
生成所需的正确结果:

<records>
    <record>
        <creators>
            <item>
                <name>
                    <family>Smith</family>
                    <given>Tim</given>
                </name>
            </item>
        </creators>
    </record>
    <record>
        <creators>
            <item>
                <name>
                    <family>Lambert</family>
                    <given>John</given>
                </name>
            </item>
        </creators>
        <editors>
            <item>
                <name>
                    <family>testEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
    <record>
        <editors>
            <item>
                <name>
                    <family>ZambertEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
</records>
<h3 class="border">L</h3>
<p>Lambert</p>
<h3 class="border">S</h3>
<p>Smith</p>
<h3 class="border">t</h3>
<p>testEDITOR</p>
<h3 class="border">Z</h3>
<p>ZambertEDITOR</p>
L
兰伯特

s 史密斯

T 测试员

Z 赞伯特编辑

并在浏览器中显示为:

<records>
    <record>
        <creators>
            <item>
                <name>
                    <family>Smith</family>
                    <given>Tim</given>
                </name>
            </item>
        </creators>
    </record>
    <record>
        <creators>
            <item>
                <name>
                    <family>Lambert</family>
                    <given>John</given>
                </name>
            </item>
        </creators>
        <editors>
            <item>
                <name>
                    <family>testEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
    <record>
        <editors>
            <item>
                <name>
                    <family>ZambertEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
</records>
<h3 class="border">L</h3>
<p>Lambert</p>
<h3 class="border">S</h3>
<p>Smith</p>
<h3 class="border">t</h3>
<p>testEDITOR</p>
<h3 class="border">Z</h3>
<p>ZambertEDITOR</p>
L 兰伯特

s 史密斯

T 测试员

Z 赞伯特编辑

说明

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:key name="kWith1stLetter" match="family" use="substring(.,1,1)"/>

 <xsl:template match="/*">
  <xsl:apply-templates select=
  "*/*/*/*/family
             [generate-id()
             =
              generate-id(key('kWith1stLetter',substring(.,1,1))[1])
             ]">
    <xsl:sort select="substring(.,1,1)" />
  </xsl:apply-templates>
 </xsl:template>

 <xsl:template match= "family">
    <h3 class="border">
     <xsl:value-of select="substring(.,1,1)"/>
    </h3>

    <xsl:apply-templates mode="inGroup"
          select="key('kWith1stLetter',substring(.,1,1))"/>
 </xsl:template>

 <xsl:template match="family" mode="inGroup">
  <p><xsl:value-of select="."/></p>
 </xsl:template>
</xsl:stylesheet>

正确使用

这是一个简单的分组问题:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:key name="kWith1stLetter" match="family" use="substring(.,1,1)"/>

 <xsl:template match="/*">
  <xsl:apply-templates select=
  "*/*/*/*/family
             [generate-id()
             =
              generate-id(key('kWith1stLetter',substring(.,1,1))[1])
             ]">
    <xsl:sort select="substring(.,1,1)" />
  </xsl:apply-templates>
 </xsl:template>

 <xsl:template match= "family">
    <h3 class="border">
     <xsl:value-of select="substring(.,1,1)"/>
    </h3>

    <xsl:apply-templates mode="inGroup"
          select="key('kWith1stLetter',substring(.,1,1))"/>
 </xsl:template>

 <xsl:template match="family" mode="inGroup">
  <p><xsl:value-of select="."/></p>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<records>
    <record>
        <creators>
            <item>
                <name>
                    <family>Smith</family>
                    <given>Tim</given>
                </name>
            </item>
        </creators>
    </record>
    <record>
        <creators>
            <item>
                <name>
                    <family>Lambert</family>
                    <given>John</given>
                </name>
            </item>
        </creators>
        <editors>
            <item>
                <name>
                    <family>testEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
    <record>
        <editors>
            <item>
                <name>
                    <family>ZambertEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
</records>
<h3 class="border">L</h3>
<p>Lambert</p>
<h3 class="border">S</h3>
<p>Smith</p>
<h3 class="border">t</h3>
<p>testEDITOR</p>
<h3 class="border">Z</h3>
<p>ZambertEDITOR</p>

史密斯
提姆
兰伯特
约翰
测试员
上下快速移动
赞伯特编辑
上下快速移动
生成所需的正确结果:

<records>
    <record>
        <creators>
            <item>
                <name>
                    <family>Smith</family>
                    <given>Tim</given>
                </name>
            </item>
        </creators>
    </record>
    <record>
        <creators>
            <item>
                <name>
                    <family>Lambert</family>
                    <given>John</given>
                </name>
            </item>
        </creators>
        <editors>
            <item>
                <name>
                    <family>testEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
    <record>
        <editors>
            <item>
                <name>
                    <family>ZambertEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
</records>
<h3 class="border">L</h3>
<p>Lambert</p>
<h3 class="border">S</h3>
<p>Smith</p>
<h3 class="border">t</h3>
<p>testEDITOR</p>
<h3 class="border">Z</h3>
<p>ZambertEDITOR</p>
L
兰伯特

s 史密斯

T 测试员

Z 赞伯特编辑

并在浏览器中显示为:

<records>
    <record>
        <creators>
            <item>
                <name>
                    <family>Smith</family>
                    <given>Tim</given>
                </name>
            </item>
        </creators>
    </record>
    <record>
        <creators>
            <item>
                <name>
                    <family>Lambert</family>
                    <given>John</given>
                </name>
            </item>
        </creators>
        <editors>
            <item>
                <name>
                    <family>testEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
    <record>
        <editors>
            <item>
                <name>
                    <family>ZambertEDITOR</family>
                    <given>Bob</given>
                </name>
            </item>
        </editors>
    </record>
</records>
<h3 class="border">L</h3>
<p>Lambert</p>
<h3 class="border">S</h3>
<p>Smith</p>
<h3 class="border">t</h3>
<p>testEDITOR</p>
<h3 class="border">Z</h3>
<p>ZambertEDITOR</p>
L 兰伯特

s 史密斯

T 测试员

Z 赞伯特编辑

说明

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:key name="kWith1stLetter" match="family" use="substring(.,1,1)"/>

 <xsl:template match="/*">
  <xsl:apply-templates select=
  "*/*/*/*/family
             [generate-id()
             =
              generate-id(key('kWith1stLetter',substring(.,1,1))[1])
             ]">
    <xsl:sort select="substring(.,1,1)" />
  </xsl:apply-templates>
 </xsl:template>

 <xsl:template match= "family">
    <h3 class="border">
     <xsl:value-of select="substring(.,1,1)"/>
    </h3>

    <xsl:apply-templates mode="inGroup"
          select="key('kWith1stLetter',substring(.,1,1))"/>
 </xsl:template>

 <xsl:template match="family" mode="inGroup">
  <p><xsl:value-of select="."/></p>
 </xsl:template>
</xsl:stylesheet>

正确使用

如果
创建者
编辑器
的情况对您的问题很重要,那么我强烈建议向我们展示一个输入示例。请解释当这两个元素都存在时,这两个元素的顺序是否已知。提供的XML文档不太具有代表性。请编辑问题并添加一条
记录
,该记录包含
创建者
编辑器
子项。此外,您还有一个重要的事实,即您希望仅对
家族的第一个字母进行排序,请在问题中清楚地解释这一点。谢谢,您已经做了这些更改并更新了问题。@user598241如果您想通知他们,@他们的姓名,否则他们永远不会知道您更改了什么。请阅读此评论框旁边的帮助。@MartinHonnen谢谢,我们已经做了这些更改并更新了问题。如果
创建者
编辑器
的情况对您的问题都很重要,那么我强烈建议向我们展示一个输入示例。请解释当这两个元素都存在时,这两个元素的顺序是否已知。提供的XML文档不太具有代表性。请编辑问题并添加一条
记录
,该记录包含
创建者
编辑器
子项。此外,您还有一个重要的事实,即您希望仅对
家族的第一个字母进行排序,请在问题中清楚地解释这一点。谢谢,您已经做了这些更改并更新了问题。@user598241如果您想通知他们,@他们的姓名,否则他们永远不会知道您更改了什么。请阅读此评论框旁边的帮助。@MartinHonnen谢谢,我已经做了这些更改并更新了问题。