Xml XSLT键,嵌套或多个
这是我的xml(大大简化和缩短了,在我的实际交易中有100个“电影”元素) 在Xml XSLT键,嵌套或多个,xml,xslt,muenchian-grouping,Xml,Xslt,Muenchian Grouping,这是我的xml(大大简化和缩短了,在我的实际交易中有100个“电影”元素) 在或中,我可以对每种体裁做我想做的任何事情。那很好 让子类型出现在每个子类型下,这让我很难受 我有这个,这是错误的,但我不知道如何使它正确 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
或
中,我可以对每种体裁做我想做的任何事情。那很好
让子类型出现在每个子类型下,这让我很难受
我有这个,这是错误的,但我不知道如何使它正确
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:key name="keyGenre" match="genre" use="."/>
<xsl:key name="keySubGenre" match="subGenre" use="../genre"/>
<xsl:template match="mediaList">
<ul>
<xsl:for-each select="movie//*[generate-id() = generate-id(key('keyGenre', .)[1])]">
<xsl:sort order="ascending"/>
<li>
<xsl:value-of select="."/>
<ul>
<li>
<xsl:for-each select="movie//*[generate-id() = generate-id(key('keySubGenre', .)[1])]">
<xsl:sort order="ascending"/>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
-
-
如果您能解释XSL2.0的工作原理,我很乐意接受它!但我对1.0的理解更为坚定。我不确定您希望如何处理子类型-它们似乎没有嵌套在子类型下。对于前两个级别,请尝试: XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="genre" match="genre" use="."/>
<xsl:key name="subGenre-by-genre" match="subGenre" use="../genre"/>
<xsl:key name="subGenre" match="subGenre" use="concat(../genre, '|', .)"/>
<xsl:template match="/">
<ul>
<!-- for each distinct genre ... -->
<xsl:for-each select="mediaList/movie/genreWrap/genre[generate-id()=generate-id(key('genre', .)[1])]">
<xsl:sort/>
<li>
<xsl:variable name="genre" select="." />
<xsl:value-of select="$genre"/>
<ul>
<!-- ... get the list of the relevant sub-genres ... -->
<xsl:variable name="mySubGenres" select="key('subGenre-by-genre', .)" />
<!-- ... and de-dupe it -->
<xsl:for-each select="$mySubGenres[generate-id()=generate-id(key('subGenre', concat($genre, '|', .))[1])]">
<xsl:sort/>
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
-
wow!太快了!多亏了这一点——至于子体裁,他们总是紧跟着子体裁,所以会添加一个键,比如,我想是的(我必须确实尝试一下)。也许有更好的方法来处理这个问题。这些数据保存在哪里?都在我的电脑上computer@user3708965哈哈,是的,但是用什么格式?你应该使用一个数据库,在一个结构合理的数据库中,所需的类型、子类型等列表可以直接导出,而不需要所有这些舞蹈。哈哈哈——对不起,对不起,我知道这不是你要问的,我只是不确定你要问什么!这一切都在一个链接到我编写的xsd文件的大xml文件中
<xsl:key name="movieByGenre" match="genre" use="."/>
select="movie//*[generate-id() = generate-id(key('movieByGenre', .)[1])]"
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:key name="keyGenre" match="genre" use="."/>
<xsl:key name="keySubGenre" match="subGenre" use="../genre"/>
<xsl:template match="mediaList">
<ul>
<xsl:for-each select="movie//*[generate-id() = generate-id(key('keyGenre', .)[1])]">
<xsl:sort order="ascending"/>
<li>
<xsl:value-of select="."/>
<ul>
<li>
<xsl:for-each select="movie//*[generate-id() = generate-id(key('keySubGenre', .)[1])]">
<xsl:sort order="ascending"/>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="genre" match="genre" use="."/>
<xsl:key name="subGenre-by-genre" match="subGenre" use="../genre"/>
<xsl:key name="subGenre" match="subGenre" use="concat(../genre, '|', .)"/>
<xsl:template match="/">
<ul>
<!-- for each distinct genre ... -->
<xsl:for-each select="mediaList/movie/genreWrap/genre[generate-id()=generate-id(key('genre', .)[1])]">
<xsl:sort/>
<li>
<xsl:variable name="genre" select="." />
<xsl:value-of select="$genre"/>
<ul>
<!-- ... get the list of the relevant sub-genres ... -->
<xsl:variable name="mySubGenres" select="key('subGenre-by-genre', .)" />
<!-- ... and de-dupe it -->
<xsl:for-each select="$mySubGenres[generate-id()=generate-id(key('subGenre', concat($genre, '|', .))[1])]">
<xsl:sort/>
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>