我们需要在src属性参数中找到并替换路径
<?xml version="1.0"?>
<ul>
<font> test sample font test </font>
<img src="/assets/rep/myimage.png"> test</img>
<img src="/assets/rep/myimage.png" height="20px"> test</img>
</ul>
我的XSLT如下
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- remove disallowed elements but keep its children -->
<xsl:template match="font">
<xsl:apply-templates></xsl:apply-templates>
</xsl:template>
<xsl:template match="@src">
<xsl:variable name="imagesrc" select="replace(.,'/assets/rep/','/images/')"/>
<img src="{$imagesrc}" />
</xsl:template>
</xsl:stylesheet>
XSLT格式适用于
<img src="/assets/rep/myimage.png"> test</img>
但不适用于
<img src="/assets/rep/myimage.png" height="20px"> test</img>
我尝试添加match =&#34; @src [parent :: img]&#34;但这也不起作用。你能让我知道我在XSLT中缺少什么来保留属性并且只修改&#34; src&#34;属性?
答案 0 :(得分:2)
将您当前的逻辑更改为以下模板:
...
<xsl:template match="img">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="img/@src">
<xsl:attribute name="src">
<xsl:value-of select="replace(.,'/assets/rep/','/images/')"/>
</xsl:attribute>
</xsl:template>
...
在您的尝试中,您创建了一个元素<img>
,而您的context-node是一个属性@src
。通过提供的示例,您将没事!
答案 1 :(得分:1)
试试这个:
<xsl:template match="@src">
<xsl:attribute name="src">
<xsl:value-of select="replace(.,'/assets/rep/','/images/')"/>
</xsl:attribute>
</xsl:template>