0

私はxslに非常に慣れておらず、xmlメッセージを解析してテンプレートを呼び出すスクリプトを作成しようとしています(入力をフォーマットすることはできません)。XML メッセージの一部のフィールドは、複数回表示できます。このような場合、「StringValue」の末尾に数字を追加し、それがどのオカレンスであるかを指定する call-template の with-param="pet" に渡します。

以下のコードは、私が望むことをしているようです。しかし、XML Spy はそれが無効な XML であると言います。「Dog/Color」の各テンプレート一致に「StringValue」と「1」、「StringValue」と「2」などを追加するより良い方法はありますか?

例えば:

<xsl:template match="Dog/Color">
    <xsl:call-template name="FormatContents">
            <xsl:with-param name="pet">StringValue<xsl:number level="any"/></xsl:with-param>
            <xsl:with-param name="color">
                    <xsl:value-of select="."/>
            </xsl:with-param>
    </xsl:call-template>
</xsl:template>

前もって感謝します!

4

2 に答える 2

2

指定したフラグメントは有効です。エラーはそのビットから発生したものですか? 完全な例を投稿することが常に最善です。

入力:

<Dog>
<Color>Red</Color>
<Color>Green</Color>
</Dog>

XSLT 1:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Dog/Color">
 <xsl:call-template name="FormatContents">
  <xsl:with-param name="pet">StringValue<xsl:number level="any"/></xsl:with-param>
  <xsl:with-param name="color">
   <xsl:value-of select="."/>
  </xsl:with-param>
 </xsl:call-template>
</xsl:template>

<xsl:template name="FormatContents">
 <xsl:param name="pet"/>
 <xsl:param name="color"/>
 [<xsl:value-of select="$pet"/>][<xsl:value-of select="$color"/>]
</xsl:template>
</xsl:stylesheet>

出力:

 [StringValue1][Red]


 [StringValue2][Green]
于 2012-04-10T15:05:39.730 に答える
0

あなたが望むのは次のとおりだと思いますposition()-つまり:

<xsl:template match="Dog/Color"> 
  <xsl:call-template name="FormatContents"> 
     <xsl:with-param name="pet">StringValue<xsl:value-of select="position()"/></xsl:with-param> 
     <xsl:with-param name="color"> 
       <xsl:value-of select="."/> 
     </xsl:with-param> 
  </xsl:call-template> 
</xsl:template> 
于 2012-04-10T15:04:45.610 に答える