2015-01-10 3 views
0

Я новичок в XSL, и у меня возникла проблема.Изменить значение в теге XML с помощью XSLT в соответствии со значением атрибута

У меня есть XML следующего формата:

<Destinations> 
    <conf:Destination id="12"> 
     <conf:attributes> 
      <conf:attribute1>1212</conf:attribute1> 
     </conf:attributes> 
    </conf:Destination> 
    <conf:Destination id="31"> 
     <conf:attributes> 
      <conf:attribute1>3131</conf:attribute1> 
     </conf:attributes> 
    </conf:Destination> 
</Destinations> 

И сказать, у меня есть XSL со следующими 2 Params:

<xsl:param name="attribute12" select="'21'" /> 
<xsl:param name="attribute31" select="'5'" /> 

Я хочу иметь шаблон XSL в XSLT 1, меняет мой xml следующим образом: 1) Для целевого id = 12 в xml значение внутри тега 'conf: attribute1' должно быть установлено как 21 2) Для идентификатора места назначения = 31 в xml значение внутри тега conf: attribute1 должен быть установлен как 5

Таким образом, я буду иметь окончательный XML как:

<Destinations> 
    <conf:Destination id="12"> 
     <conf:attributes> 
      <conf:attribute1>21</conf:attribute1> 
     </conf:attributes> 
    </conf:Destination> 
    <conf:Destination id="31"> 
     <conf:attributes> 
      <conf:attribute1>5</conf:attribute1> 
     </conf:attributes> 
    </conf:Destination> 
</Destinations> 

Может кто-нибудь пожалуйста, помогите.

+0

Почему вопрос помечен как 'XSLT-2.0' при запросе XSLT 1? –

+0

Спасибо, исправлено. Любая помощь с этим .. –

ответ

1

Используйте шаблон трансформации идентичности

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

, а затем два шаблона

<xsl:template match="conf:Destination[@id='12']/conf:attributes/conf:attribute1"> 
    <xsl:copy> 
    <xsl:value-of select="$attribute12"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="conf:Destination[@id='31']/conf:attributes/conf:attribute1"> 
    <xsl:copy> 
    <xsl:value-of select="$attribute31"/> 
    </xsl:copy> 
</xsl:template> 
+0

Спасибо, ты потрясающий! –