【问题标题】:Xslt Headers show only onceXslt 标头仅显示一次
【发布时间】:2013-05-27 17:17:05
【问题描述】:

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

我得到了预期的一切,但我的标题被重复为 我得到了这样的东西

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

  • 关于我们

  • 我们是谁?
  • 回答

  • 另一部分

  • 问题
  • 回答

但我想要这样的东西

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

  • 我们是谁?

  • 回答

  • 另一部分

  • 问题

  • 回答

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

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    这是一个分组问题。解决方案是 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>
    

    【讨论】:

    • 非常感谢先生,我已经通过另一种方式做到了这一点,但您的解决方案也运行良好,所以为您投票
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多