使用XSLT为属性添加前缀值

时间:2013-05-07 09:48:30

标签: xslt xslt-1.0

我有一个变量(ImgData),其值为<p><image id="image1" name="firstimage" /></p>

如何使用XSLT将ImgData的值更改为<p><image id="m-image1" name="firstimage" />

我只想为 m 添加前缀或后缀为id属性。提前谢谢。

编辑:

我的ImgData取值为

<xsl:variable name="ImgData">
  <p><?image id="image1" /></p>
</xsl:variable>

如何将ImgData的值更改为

<xsl:variable name="ImgData">
      <p><?image id="m-image1" /></p>
    </xsl:variable>

根据hr_117评论,我将此添加到我的xslt但不显示ID。

<xsl:variable name="sam">
  <xsl:value-of select="translate($ImgData,'?','')" />      
</xsl:variable>
<xsl:value-of select="$sam"/>
<xsl:value-of select="exsl:node-set($sam)//image/@id" />

我能够在没有“?”的情况下打印Imgdata值。不知道为什么x-path不工作。请建议。

3 个答案:

答案 0 :(得分:1)

使用concat(“Navin”,“Rawat”)之类的concat函数来获取输出“Navin Rawat”

答案 1 :(得分:1)

至少有三个问题  *您的变量内容格式不正确xml,节点名称不能以<?开头这是处理指令的开始。
*您无法使用xllt-file xist-1.0中的xml访问变量的内容。这只能通过例如扩展来实现。 “exsl:节点集”。

尝试此操作以访问图像的id属性。

 <?xml version="1.0"?>
<xsl:stylesheet
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:exsl="http://exslt.org/common"
   extension-element-prefixes="exsl"
   version="1.0">

    <xsl:variable name="ImgData">
        <p>
            <image id="image1" />
        </p>
    </xsl:variable>

    <xsl:template match="/" >
        <xsl:value-of select="exsl:node-set($ImgData)//image/@id"/>
    </xsl:template>

</xsl:stylesheet>
  • 您无法更改xslt变量的值。你唯一能做的就是根据旧版本创建一个新内容,并改变内容。

更新:创建内容已更改的新变量的示例。

<xsl:template match="/" >
        <xsl:variable name="NewImgData">
            <xsl:apply-templates select="exsl:node-set($ImgData)" mode="new-var" />
        </xsl:variable>
    </xsl:template>

    <xsl:template match="image/@id" mode="new-var">
        <xsl:attribute name="id" >
            <xsl:value-of select="concat('m-',.)"/>
        </xsl:attribute>
    </xsl:template>
    <xsl:template match="@*| node()" mode="new-var">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" mode="new-var"/>
        </xsl:copy>
    </xsl:template>

NewImgData的内容现在是:

<p><image id="m-image1"/></p>

答案 2 :(得分:1)

ImagData似乎是一个字符串。因此唯一可能用xlst-1.0做一些事情 就像这个丑陋的选择:

<xsl:value-of select=" concat(
                          substring-before($ImgData, substring-after($ImgData,'id=&quot;')),
                          'm-',
                          substring-after($ImgData,'id=&quot;')
                      ) "
                       disable-output-escaping="yes"
                      />

这只有在字符串变量中只有一个id时才有效。这也可能会产生:

 <p><?image id="m-image1" /></p>

但我不会这样推荐。