Xml XSLT 1.0-创建唯一的有序列表
我试图创建一个转换,在其中生成一个有序的唯一列表(其中一个连字符分隔两个值) 我有消息来源Xml XSLT 1.0-创建唯一的有序列表,xml,list,xslt,unique,Xml,List,Xslt,Unique,我试图创建一个转换,在其中生成一个有序的唯一列表(其中一个连字符分隔两个值) 我有消息来源 <?xml version="1.0"?> <results> <result> <Name>Blue</Name> <Author>Hat</Author> <TrackNum>5</TrackNum> </result>
<?xml version="1.0"?>
<results>
<result>
<Name>Blue</Name>
<Author>Hat</Author>
<TrackNum>5</TrackNum>
</result>
<result>
<Name>Red</Name>
<Author>Car</Author>
<TrackNum>2</TrackNum>
</result>
<result>
<Name>Blue</Name>
<Author>Hat</Author>
<TrackNum>345</TrackNum>
</result>
</results>
XLST-当前不返回任何内容(我知道它也缺少第二个连字符/连接的值)
您的方法是正确的。您的xsl:for每个select的XPath中都有一个o类型:/results/results
应该是/results/result
。我对该键进行了轻微调整,以确定它匹配和使用的内容
下面生成一个唯一的姓名和作者组合列表,按姓名
排序,然后按作者
排序
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:key name="Name-Author" match="results/result" use="concat(Name, ' - ', Author)" />
<xsl:template match="/">
<xsl:for-each select="/results/result[generate-id()
= generate-id(key('Name-Author',concat(Name, ' - ', Author))[1])]">
<xsl:sort select="Name"/>
<xsl:sort select="Author"/>
<li>
<xsl:value-of select="concat(Name, ' - ', Author)"/>
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
谢谢Mads!太好了。另外,为了便于讨论,我可以使用现有的concat向Author添加一个超链接吗?
这对我不起作用。不,concat()
连接字符串。在这种情况下,您需要创建一个元素。您需要执行以下操作:-
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:key name="Name" match="/results/result/Name/text()" use="." />
<xsl:template match="/">
<xsl:for-each select="/results/results/Name/text()[generate-id()
= generate-id(key('Name',.)[1])]">
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:key name="Name-Author" match="results/result" use="concat(Name, ' - ', Author)" />
<xsl:template match="/">
<xsl:for-each select="/results/result[generate-id()
= generate-id(key('Name-Author',concat(Name, ' - ', Author))[1])]">
<xsl:sort select="Name"/>
<xsl:sort select="Author"/>
<li>
<xsl:value-of select="concat(Name, ' - ', Author)"/>
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>