我想在&#34; <use_arg_label>&#34;之前和之后添加一个空格。我应该使用什么xsl转换?

时间:2018-01-06 13:35:59

标签: xml xslt

这听起来像是一个愚蠢的问题,但我对xslt来说还是个新手。 所以对于以下代码

    <short_desc>Hello<use_arg_label/>World
    </short_desc>

如果我使用

<xsl:template match="use_arg_label">                                               
    <xsl:text> </xsl:text>                    
</xsl:template>

它用空格替换标记本身。

我希望输出为

<short_desc>Hello <use_arg_label/> World
</short_desc>

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您使用XSLT 2及更高版本,则只需利用xsl:next-match将复制委派给身份转换:

  <xsl:template match="use_arg_label">
      <xsl:text> </xsl:text>
      <xsl:next-match/>
      <xsl:text> </xsl:text>
  </xsl:template>

使用全局声明在XSLT 3(参见http://xsltfiddle.liberty-development.net/gWcDMeg)中轻松设置身份转换

<xsl:mode on-no-match="shallow-copy"/>

或在XSLT 2中拼写为

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

使用XSLT 1,您需要调用身份转换

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

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

  <xsl:template match="use_arg_label">
      <xsl:text> </xsl:text>
      <xsl:call-template name="identity"/>
      <xsl:text> </xsl:text>
  </xsl:template>

</xsl:stylesheet>

http://xsltfiddle.liberty-development.net/jyyiVhi