2012-04-10 1 views
0

Я очень новичок в xsl и пытаюсь написать скрипт для синтаксического анализа XML-сообщения и вызова шаблона (который я не могу контролировать для форматирования ввода). Некоторые из полей в XML-сообщении могут появляться несколько раз; в этих случаях я хочу добавить число в конец «StringValue» и передать его в параметр-param = «pet» шаблона вызова, который указывает, в каком именно случае он находится.XSL Как объединить текст с xsl: number?

Код, как представляется, делает то, что я хочу; но XML Spy говорит, что это недопустимый XML. Есть ли лучший способ добавить «StringValue» и «1», «StringValue» и «2» и т. Д. Для каждого совпадения шаблонов «Dog/Color»?

Например:

<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> 

Заранее спасибо!

+0

http://stackoverflow.com/questions/10090271/xsl-how-to-concatenate -text-with-xslnumber – thejartender

ответ

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] 
+0

Спасибо за ответ David; после возврата и двойной проверки я обнаружил, что моя ошибка исходила из XMLSpy, не видя шаблон вызова. – Mrc0113

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> 
+0

position() не будет (в общем) указать тот же номер, что и xsl: number level = "any" –