0

我对 xsl 非常陌生,并试图编写一个脚本来解析 xml 消息并调用一个模板(我无法控制它来格式化输入)。XML 消息中的某些字段可以出现多次;在这些情况下,我想在“StringValue”的末尾附加一个数字,并将其传递给指定它出现的调用模板的 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 回答