1

Nirajhr_117の助けのおかげで、この XML を変換する XSL テンプレートにたどり着くことができました...

<bookings>
  <entry>
    <event>Christmas</event>
    <attendees>2</attendees>
  </entry>
  <entry>
    <event>Halloween</event>
    <attendees>2</attendees>
  </entry>
  <entry>
    <event>Easter</event>
    <attendees>1</attendees>
  </entry>
  <entry>
    <event>Easter</event>
    <attendees>1</attendees>
  </entry>
</bookings>

...この出力に:

クリスマス: 1 件の予約

ハロウィーン: 1 件の予約

イースター: 2 予約

これは私のXSLです:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="data">
  <xsl:apply-templates select="bookings"/>
</xsl:template>

<xsl:key name="bookings-within-period" match="bookings/entry" use="event" />

<xsl:template match="bookings">
  <xsl:for-each select="entry[count(. | key('bookings-within-period', event)[1]) = 1]">
      <p>
          <xsl:value-of select="concat(event,': ')" />
          <xsl:value-of select="count(key('bookings-within-period', event))" />
          <xsl:text> booking(s)</xsl:text>          
      </p>
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

この関数で合計を計算するにはどうすればよいattendeesですか?

これは私が必要とする出力です:

クリスマス: 1 件の予約、2 人の出席者

ハロウィーン: 1 件の予約、2 人の出席者

イースター: 2 件の予約、2 人の出席者

助けてくれる人に感謝します!

4

2 に答える 2

3

を使用すると、各グループの要素が得られ、次に各グループkey('bookings-within-period', event)の要素の合計が得られます。entrysum(key('bookings-within-period', event)/attendees)attendees

for-eachそして、それが明確でない場合に備えて、各グループの最初のentry要素がコンテキストノードである内部でそれを行う必要があります。

于 2013-05-16T10:10:31.377 に答える
2

拡張 XSLT は次のとおりです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="data">
    <xsl:apply-templates select="bookings"/>
  </xsl:template>

  <xsl:key name="bookings-within-period" match="bookings/entry" use="event" />

  <xsl:template match="bookings">
    <xsl:for-each select="entry[count(. | key('bookings-within-period', event)[1]) = 1]">
      <p>
        <xsl:value-of select="concat(event,': ')" />
        <xsl:value-of select="count(key('bookings-within-period', event))" />
        <xsl:text> booking(s), </xsl:text>
        <xsl:value-of select="sum(key('bookings-within-period', event)/attendees)" />
        <xsl:text> attendee(s)</xsl:text>
      </p>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

<xsl:value-of select="sum(key('bookings-within-period', event)/attendees)" />すべての出席者を合計する必要がある場所

于 2013-05-16T10:14:46.187 に答える