大家好,我有一个问题,我对XSLT很新,所以这可能是一个菜鸟问题 这是我的xml结构
<FAQ>
<!--About Us-->
<Query Section="About Us">
<Question>How do I contact Support?</Question>
<Answer>
You can connect with us on Twitter or Facebook.
</Answer>
</Query>
<Query Section="About Us">
<Question>Who we are?</Question>
<Answer>Will discus it later</Answer>
</Query>
<Query Section="Another section">
<Question>any question?</Question>
<Answer>answer</Answer>
</Query>
</FAQ>
这是我的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
</head>
<body>
<h2>FAQS</h2>
<div border="1">
<xsl:for-each select="//*[@Section]">
<xsl:sort select="@Section"/>
<ul>
<li style="color:blue;cursor:pointer" class="Question">
<xsl:value-of select="Question"/>
</li>
<li style="display:none" class="answer">
<xsl:value-of select="Answer"/>
</li>
</ul>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我按照预期得到了所有东西,但我的标题正在重复 我得到这样的东西
答案
关于我们
答案
另一部分
但我想要一些像这样的东西
答案
我们是谁?
答案
另一部分
问题
请注意,关于我们的标题只会出现一次:)希望我已经很好地解释了所有事情
答案 0 :(得分:0)
这是一个分组问题。解决方案是muenchian分组(e.g look to this)。
因此为xslt添加一个键:
<xsl:key name="kQuerySection" match="Query" use="@Section"/>
必须循环。
循环群组:
<xsl:for-each select="//Query[
generate-id() = generate-id(key('kQuerySection', @Section)[1])
]">
循环群组成员。
<xsl:for-each select="key('kQuerySection', @Section)">
因此请尝试:
<?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" indent="yes"/>
<xsl:key name="kQuerySection" match="Query" use="@Section"/>
<xsl:template match="/">
<html>
<head>
</head>
<body>
<h2>FAQS</h2>
<div border="1">
<xsl:for-each select="//Query[
generate-id() = generate-id(key('kQuerySection', @Section)[1])
]">
<xsl:sort select="@Section"/>
<ul>
<li>
<xsl:value-of select="@Section"/>
<xsl:for-each select="key('kQuerySection', @Section)">
<ul>
<li style="color:blue;cursor:pointer" class="Question">
<xsl:value-of select="Question"/>
</li>
<li style="display:none" class="answer">
<xsl:value-of select="Answer"/>
</li>
</ul>
</xsl:for-each>
</li>
</ul>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>