连接到xlst中的现有值

时间:2017-07-20 19:48:40

标签: xslt-1.0

使用XSLT 1.0,我只想在Identifier元素中的值之前添加一个负号。我在下面显示的样式表为每个RToP实例返回相同的(即第一个实例)标识符值。可以有多个RToP。 PLease建议如何修改匹配,以便我在下面返回所需的输出。谢谢。我在下面的xml中省略了命名空间。

<TRAN><DE><REF>
<RToP><Identifier>100</Identifier>
</RToP>
<RToP><Identifier>150</Identifier>
</RToP>
</TRAN></DE></REF>

现有输出

<TRAN><DE><REF>
<RToP><Identifier>-100</Identifier>
</RToP>
<RToP><Identifier>-100</Identifier>
</RToP>
</TRAN></DE></REF>

期望的输出

<TRAN><DE><REF>
<RToP><Identifier>-100</Identifier>
</RToP>
<RToP><Identifier>-150</Identifier>
</RToP>
</TRAN></DE></REF>

现有样式表

  <xsl:template match="//my:TRAN/my:DE/my:REF/my:RToP/my:Identifier[position()]">
    <my:Identifier>
    <xsl:value-of select="concat('-', //my:TRAN/my:DE/my:REF/my:RToP/my:Identifier[position()])"/>
    </my:Identifier>
  </xsl:template>

1 个答案:

答案 0 :(得分:0)

对于这种类型的转换,您需要使用相对路径而不是绝对路径。

首先,您必须创建相同的转换以保留其结构。

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

比你必须将Identifier定义为仅在Identifier上运行的模板,并且不需要使用谓词。

<xsl:template match="Identifier">
    <Identifier>
        <xsl:value-of select="concat('-', .)"/>
    </Identifier>
</xsl:template>