0

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

我得到了所有的东西,但是我的标题被重复了,因为我得到了这样的东西

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

  • 关于我们

  • 我们是谁?
  • 回答

  • 另一部分

  • 问题
  • 回答

但我想要这样的东西

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

  • 我们是谁?

  • 回答

  • 另一部分

  • 问题

  • 回答

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

4

1 回答 1

0

这 ia 分组问题。解决方案是 muenchian 分组(例如看这个)。

因此为您的 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>
于 2013-05-27T09:11:57.983 回答