我有以下代码:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:key name="categories" match="Category" use="." />
<xsl:key name="clients" match="Category" use ="Category/Client" />
<xsl:template match="/">
<ul id="red" class="treeview-red">
<xsl:for-each select="/Promotions/Promotion/Category[
generate-id(.) = generate-id(key('categories', .)[1])
]">
<xsl:variable name="cname" select="." />
<li>
<span>
<xsl:value-of select="$cname" />
</span>
<xsl:for-each select="/Promotions/Promotion[Category=$cname]">
<ul>
<li>
<span>
<xsl:value-of select="Client" />
</span>
</li>
<ul>
<li>
<span>
<xsl:value-of select="Title" />
</span>
</li>
</ul>
</ul>
</xsl:for-each>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
我的XML:
<Promotions>
<Promotion>
<Category>Arts & Entertainment</Category>
<Client>Client 1</Client>
<Title>Get your Free 2</Title>
</Promotion>
<Promotion> …Run Code Online (Sandbox Code Playgroud) 我有一个XML文件,如下所示......
<states>
<state>
<name>North Carolina</name>
<city>Charlotte</city>
</state>
<state>
<name>Alaska</name>
<city>Fairbanks</city>
</state>
<state>
<name>Virginia</name>
<city>Leesburg</city>
</state>
<state>
<name>Alaska</name>
<city>Coldfoot</city>
</state>
<state>
<name>North Carolina</name>
<city>Harrisburg</city>
</state>
<state>
<name>Virginia</name>
<city>Ashburn</city>
</state>
</states>
Run Code Online (Sandbox Code Playgroud)
我需要生成一份列出每个州的报告,按照每个城市的字母顺序排列......例如..
Alaska - Fairbanks, Coldfoot
North Carolina - Charlotte, Harrisburg
Virginia - Leesburg, Ashburn
Run Code Online (Sandbox Code Playgroud)
(城市不必按照alpha顺序排列,只需要按州规定)
我尝试通过对状态/状态执行for-each,按名称对其进行排序并对其进行处理来解决此问题.像这样....
<xsl:for-each select="states/state">
<xsl:sort select="name" data-type="text" order="ascending"/>
<xsl:value-of select="name"/>-<xsl:value-of select="city"/>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
这给了我......
Alaska - Fairbanks
Alaska - Coldfoot
North Carolina - Charlotte
North Carolina - Harrisburg
Virginia - Leesburg
Virginia - Ashburn
Run Code Online (Sandbox Code Playgroud)
排序工作,现在我想分组.我唯一能想到的就是比较之前的状态,因为它已经排序,它应该识别状态值是否没有改变.像这样...
<xsl:for-each select="states/state">
<xsl:sort …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的XSLT中使用Muenchian分组来对匹配的节点进行分组,但我只想在父节点内进行分组,而不是在整个源XML文档中进行分组.
给出XSLT和XML如下(对我的示例代码的长度表示道歉):
XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>
<xsl:key name="contacts-by-surname" match="contact" use="surname" />
<xsl:template match="records">
<xsl:for-each select="contact[count(. | key('contacts-by-surname', surname)[1]) = 1]">
<xsl:sort select="surname" />
<xsl:value-of select="surname" />,<br />
<xsl:for-each select="key('contacts-by-surname', surname)">
<xsl:sort select="forename" />
<xsl:value-of select="forename" /> (<xsl:value-of select="title" />)<br />
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
XML
<root>
<records>
<contact id="0001">
<title>Mr</title>
<forename>John</forename>
<surname>Smith</surname>
</contact>
<contact id="0002">
<title>Dr</title>
<forename>Amy</forename>
<surname>Jones</surname>
</contact>
<contact id="0003">
<title>Mrs</title>
<forename>Mary</forename>
<surname>Smith</surname>
</contact>
<contact id="0004">
<title>Ms</title>
<forename>Anne</forename>
<surname>Jones</surname>
</contact>
<contact …Run Code Online (Sandbox Code Playgroud)