我有一个变量(ImgData)作为值<p><image id="image1" name="firstimage" /></p>
如何使用XSLT将ImgData的值更改为<p><image id="m-image1" name="firstimage" />
我只是想前缀或后缀m id属性。提前谢谢。
编辑:
My ImgData取value为
<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不起作用。请建议。
ImagData似乎是一个字符串。因此使用xlst-1.0的唯一可能就像这个丑陋的select:
<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>
但是我不建议这样做。
使用concat("Navin", "Rawat")之类的concat函数获取输出"Navin Rawat"
至少有三个问题。
*您的变量内容不是格式良好的xml,节点名不能以<?
开头,这是一个处理指令的开始。
*不能使用xlst-1.0从xslt-file中使用xml访问变量的内容。这是唯一可能的扩展,例如。"object -节点集"。
尝试访问图像的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变量的值。你唯一能做的就是在旧的基础上创建一个新的,并改变内容。
Update:创建新变量的示例。
<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>