我有img標籤的XML如何添加XSL屬性
<img>
source
</img>
我要生成:
<img src="source.jpg">
我想類似的東西:
<img>
<xsl:attribute name="src">
<xsl:text>
<xsl:value-of select="node()" />.jpg
</xsl:text>
</xsl:attribute>
</img>
但doesng工作
我有img標籤的XML如何添加XSL屬性
<img>
source
</img>
我要生成:
<img src="source.jpg">
我想類似的東西:
<img>
<xsl:attribute name="src">
<xsl:text>
<xsl:value-of select="node()" />.jpg
</xsl:text>
</xsl:attribute>
</img>
但doesng工作
該原因爲什麼你在做什麼不起作用的是,你不能評估<xsl:text>
元素內的XSLT表達式。
<xsl:text>
can only contain literal text, entity references, and #PCDATA。
如果移動<xsl:value-of>
外<xsl:text>
的,那麼下面的工作:
<img>
<xsl:attribute name="src">
<xsl:value-of select="node()" />
<xsl:text>.jpg</xsl:text>
</xsl:attribute>
</img>
但是,對於您的示例<img>
選擇<xsl:value-of select="node()>
將包括回車和<img>
元素內的空白字符,這可能不是你想要的src
屬性值。
這就是爲什麼Dimitre Novatchev used normalize-space()
in his answer。將其應用於上面的例子:
<img>
<xsl:attribute name="src">
<xsl:value-of select="normalize-space(node())" />
<xsl:text>.jpg</xsl:text>
</xsl:attribute>
</img>
如果您擺脫<xsl:text>
爲Fabiano's solution建議,那麼你也可以這樣做:
<img>
<xsl:attribute name="src"><xsl:value-of select="normalize-space(node())" />.jpg</xsl:attribute>
</img>
使用:
<img src="{normalize-space()}.jpg"/>
這假定<img>
元件是當前節點。
我是一個近期轉換爲屬性值模板的人,我認爲它們非常有用,並且在適用的地方提供簡潔易讀的代碼。我建議所有XSL新人進行調查:http://www.w3.org/TR/xslt#attribute-value-templates – arooaroo 2013-06-23 09:25:11
@arooaroo,是的,完全同意。 – 2013-06-23 16:33:55
只需刪除標籤xsl:text,在這種情況下,您將不需要它。試試這個:
<img>
<xsl:attribute name="src">
<xsl:value-of select="concat(node(), '.jpg')"/>
</xsl:attribute>
</img>
我沒有測試它,但它應該工作。 =)
它會「工作」,但會包含空白文本節點,生成「」,這可能不是@liysd想要的。使用normalize-space()作爲@Dimitre Novatchev建議會讓你的答案成爲有效的答案。 – 2010-07-24 03:00:10
<img>
<xsl:attribute name="src">
<xsl:value-of select="my_photo/@href" />
</xsl:attribute>
</img>
<my_photo href="folder/poster.jpg" />
問得好(+1)。看到我的答案是一個簡短而簡單的解決方案。 – 2010-07-23 18:18:34