Xslt标题只显示一次

时间:2013-05-27 06:47:35

标签: xml xslt

大家好,我有一个问题,我对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>

我按照预期得到了所有东西,但我的标题正在重复 我得到这样的东西

  • 关于我们
  • 我如何联系支持
  • 答案

  • 关于我们

  • 我们是谁?
  • 答案

  • 另一部分

  • 问题
  • 答案

但我想要一些像这样的东西

  • 关于我们
  • 我如何联系支持
  • 答案

  • 我们是谁?

  • 答案

  • 另一部分

  • 问题

  • 答案

请注意,关于我们的标题只会出现一次:)希望我已经很好地解释了所有事情

1 个答案:

答案 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>