我有一个变量(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不工作。请建议。
答案 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>
更新:创建内容已更改的新变量的示例。
<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="')),
'm-',
substring-after($ImgData,'id="')
) "
disable-output-escaping="yes"
/>
这只有在字符串变量中只有一个id时才有效。这也可能会产生:
<p><?image id="m-image1" /></p>
但我不会这样推荐。