这是我的xml的缩减示例
<Albums>
<Album id="1">
<info>sdkjsdaln</info>
</Album>
<Album id="2">
<info>asdlnasd</info>
</Album>
<Album id="3">
<info>sadsasd</info>
</Album>
</Albums>
我使用扩展功能来获取更多数据
<xsl:template match="Album">
<xsl:variable name="Album" select="mfeg:GetAlbumMetadata(@id)"/>
</xsl:template>
然后我有变量$ Album,我引用它来获取所有额外数据,如下所示
<Album>
<Tracks>
<Track>
<Contributors>
<Contributor>Tim</Contributor>
<Contributor>Alfie</Contributor>
</Contributors>
</Track>
<Track>
<Contributors>
<Contributor>Tim</Contributor>
<Contributor>Alfie</Contributor>
</Contributors>
</Track>
<Track>
<Contributors>
<Contributor>Kevin</Contributor>
<Contributor>Sam</Contributor>
</Contributors>
</Track>
</Tracks>
</Album>
我正在尝试获得独特的贡献者,我不知道如何/如果可以在我的变量$ Album上使用Key来获取我需要的数据。我已尝试过下面的xpath,但它不起作用。
$Album/Tracks/Track/Contributors/Contributor[not(.=preceding-sibling::Name)]
任何帮助将不胜感激!
答案 0 :(得分:0)
定义一个你只需使用的密钥即可。
<xsl:key name="k1" match="Track/Contributors/Contributor" use="."/>
然后应用Muenchian分组你应该能够
<xsl:apply-templates select="$Album/Tracks/Track/Contributors/Contributor[generate-id() = generate-id(key('k1', .)[1])]"/>
然后您可以为Contributor元素编写模板。请注意,您可能需要调整路径以适应$Album/Album/Tracks/Track/Contributors/Contributor[generate-id() = generate-id(key('k1', .)[1])]
,取决于扩展函数返回的节点(元素或文档节点)类型。