2010-09-22 57 views
2

可以使用XSL模板將第二個字符串的第一個字母更改爲小寫嗎?或者有沒有辦法在HTML中將第二個字符串的第一個字母改爲小寫?第一個字母的僞代碼沒有工作,因爲它只能是選擇器的主題。使用XSL組合XML中的兩個字符串,輸出爲HTML

即:
「名稱」,

在XML 「 [R eturns的東西的東西。」

需要(在HTML中):
名稱 r會產生某種東西。

+0

好問題(+1)。查看我的答案以獲取簡短的XSLT解決方案。 :) – 2010-09-22 17:09:29

回答

2

這XSLT轉換

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/*"> 
    <xsl:variable name="v1stchar" select= 
    "substring(translate(s[2],translate(s[2],'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ''),''),1,1)"/> 
    <xsl:value-of select= 
    "concat(s[1], 
      ' ', 
      substring-before(s[2], $v1stchar), 
      translate($v1stchar,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 
      substring-after(s[2], $v1stchar) 
     ) 
    "/> 
</xsl:template> 
</xsl:stylesheet> 

當這個XML文檔施加:

<t> 
<s>Name</s> 
<s>*R*eturns the something of the something.</s> 
</t> 

產生想要的,正確的結果

Name *r*eturns the something of the something. 

即使在單個XPath表達式中也可以這樣做,但它看起來很笨拙。

+1

@Dimitre:很好的答案,但我認爲OP的問題有那些'*'只是爲了澄清。另外,它必須用'fn:translate()'來表示,你需要明確定義alfabeth。你知道,我不是英語。 – 2010-09-22 17:56:09

+0

@Alejandro:沒問題,只是傳遞字母,大寫和小寫作爲參數。 – 2010-09-22 18:04:57

+2

@Alejandro:辯論OP的想法是沒用的......我們寫他寫的東西。很明顯,XLM表示XML,而「sentense」表示「串」。其他的一切都是猜測,讓我們不要將我的幻想與你的比較:) – 2010-09-22 18:07:37

相關問題