使用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>
答案 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>