gpt4 book ai didi

xml - 如何使用 xsl :for-each with XSL 1. 0 对数据进行分组

转载 作者:数据小太阳 更新时间:2023-10-29 02:27:03 24 4
gpt4 key购买 nike

我正在尝试根据以下答案使用 XSLT 为 XML 文档中的每个用户获取多个 html 文档:how to apply group by on xslt elements但是没有成功。

XML:

<root>
<ArrayOfResult>
<Result>
<Men>
<BowlerResult>
<Person>
<Name>name 1</Name>
</Person>
<Data>
<Score1>1</Score1>
<Score2>1</Score2>
<Score3>1</Score3>
</Data>
</BowlerResult>
<BowlerResult>
<Person>
<Name>name 2</Name>
</Person>
<Data>
<Score1>2</Score1>
<Score2>2</Score2>
<Score3>2</Score3>
</Data>
</BowlerResult>
</Men>
<Women>
<BowlerResult>
<Person>
<Name>name 3</Name>
</Person>
<Data>
<Score1>3</Score1>
<Score2>3</Score2>
<Score3>3</Score3>
</Data>
</BowlerResult>
</Women>
</Result>
<Result>...</Result>
</ArrayOfResult>
<ArrayOfResult>...</ArrayOfResult>

一个人可以在多个联赛中

我想要实现的目标:对于每个人(不同的人/名字),我想从所有“BowlerResult”元素中积累数据

我现在拥有的 XSLT:

<xsl:key name="keyPerson" match="BowlerResult" use="Person/Name" />

<xsl:template match="text()" />

<xsl:template match="/root">
<root>
<xsl:apply-templates />
</root>
</xsl:template>

<xsl:template
match="BowlerResult[generate-id(.)=generate-id(key('keyPerson',Person/Name)[1])]">
<Person value="{Person/Name}">
<xsl:for-each select="key('keyPerson', Person/Name)">
<Result>
<id>
<xsl:value-of select="Person/Name" />
</id>
</Result>
</xsl:for-each>
</Person>
</xsl:template>

但这只给了我第一个人的迭代。

最佳答案

您的 XSLT 有很多问题,但这里的主要问题是第一个模板的路径与任何内容都不匹配(TeamResult 不直接位于 root 下并且没有 Result 元素。此外,该键名为“keyPerson”,而不是“keyBowler”。

此 XSLT 成功地将每个玩家分组一次。你能试一试吗? (注意实际输入 XML 使用元素名称 BowlerResult 和 Bowler)

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

<xsl:key name="keyPerson" match="BowlerResult" use="Bowler/Name" />

<xsl:template match="text()" />

<xsl:template match="/root">
<root>
<xsl:apply-templates />
</root>
</xsl:template>

<xsl:template
match="BowlerResult[generate-id(.)=generate-id(key('keyPerson',Bowler/Name)[1])]">
<xsl:variable name="name" select="Bowler/Name" />
<Person value="{$name}">
<xsl:for-each select="key('keyPerson', $name)">
<Result>
<id>
<xsl:value-of select="$name" />
</id>
</Result>
</xsl:for-each>
</Person>
</xsl:template>


</xsl:stylesheet>

关于xml - 如何使用 xsl :for-each with XSL 1. 0 对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14396191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com