2

パラメータ 'numberOfRecords' を持つトレーラ レコードのテンプレートがあります。

 <xsl:template name="render-FileTrailer">
    <xsl:param name="fileRecordIdentifier" select="TR"/>
    <xsl:param name="numberOfRecords"/>
  </xsl:template>

この数は、親レコードとそのすべての子レコードの合計数になります。例は

<people>
  <person>
    <name> Mark</name>
    <age>32</age>
    <children>
      <child>
        <name> Mark Jr.</name>
        <age> 2</age>
      </child>
      <child>
        <name> Angel</name>
        <age> 4</age>
      </child>
    </children>
  </person>
</people>

したがって、これは 3、1(マーク) + 2(彼の 2 人の子供) を返します。

これどうやってするの?XSLT を扱うのはこれが初めてです。

4

3 に答える 3

3

あなたは XSLT に不慣れだと言っているので、混乱していることがいくつかあるかもしれません :-)fileRecordIdentifierおよびnumberOfRecordsパラメータの使用目的が不明です。いずれにせよ、それらを使用してテンプレートから値を返すことはできません。XSLT はそのようには機能しません。現状の質問に可能な限りお答えします。

以下のスタイルシートはテンプレートを呼び出し、すべての people 要素とすべての子要素の数を追加します。結果は単に「3」になります (ちなみに、有効な XML ではありません)。ただし、これはルート テンプレートでも同様に適切に実行できるため、render-FileTrailerテンプレートの使用目的を明確にすることをお勧めします。質問をもう少し詳しく説明していただければ、さらに詳しく説明できます。

/補足として、XML ファイルの一部の終了タグが欠落しています。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
   <xsl:template match="/">
      <xsl:call-template name="render-FileTrailer"/>
   </xsl:template>

   <xsl:template name="render-FileTrailer">
      <xsl:sequence select="count(//people) + count(//child)"/>
   </xsl:template>
</xsl:stylesheet>
于 2012-09-25T19:49:52.860 に答える
1

次の XPath を使用して、ドキュメント内のすべての人物と子要素の数を取得できます。

count(//person|//child)

テンプレートに適用すると、numberOfRecords パラメータのデフォルト値が作成されます。

<xsl:template name="render-FileTrailer">
    <xsl:param name="fileRecordIdentifier" select="TR"/>
    <xsl:param name="numberOfRecords" select="count(//person|//child)"/>
</xsl:template>

または、次のように、テンプレートを呼び出すときにその値を指定できます。

    <xsl:call-template name="render-FileTrailer">
        <xsl:with-param name="numberOfRecords" select="count(//person|//child)"/>
    </xsl:call-template>
于 2012-09-25T21:06:11.593 に答える
1

次の単一の XPath 式を使用します

count(/*/person) + count(/*/person/children/child)
于 2012-09-26T13:13:35.207 に答える