2011-06-08 28 views
3

我一直在尋找一些代碼,我看到這一點:XSLT允許CONCAT參數和規範空間

<xsl:variable name="newlist" select="concat(normalize-space($list), ' ')" /> 

我只是隻此信息想知道,我可以放心地爲確保$列表是說一個stringnormalize-space($list)肯定會還給我一個string和線concat(normalize-space($list), ' ')肯定會還給我一個string(而該字符串的最後一個字符是一個空間?)

回答

1

$list可能是一個字符串,一個數字,一個節點集合,任何東西。結果將是一個字符串。是的,最後一個角色將是一個空間。

例如:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output omit-xml-declaration="yes"/> 

    <xsl:template match="/"> 
     <xsl:variable name="node"> 
      <node> 
       <subnode>string</subnode> 
       <subnode>otherstring</subnode> 
      </node> 
     </xsl:variable> 
    <xsl:variable name="string" select="concat($node,' ')"/> 
    <xsl:value-of select="string-length($string)"/> 
    <xsl:value-of select="substring-before($string,' ')"/> 
    </xsl:template> 

</xsl:stylesheet> 

回報

18stringotherstring 
0

我認爲你可以安全地假定這將返回一個字符串,但你不能確定$ list是一個字符串normalize-spac e將首先嚐試轉換爲字符串。例如。

<xsl:value-of select="concat(normalize-space(13), ' ')"/> 

會工作。

有關concatnormalize-space的更多信息。

還要注意的是,如果$list設置不正確,這可能會失敗,如

<xsl:variable name="list" select="12 34" /> 

所以你永遠無法真正安全地假定它沒有看到代碼的其餘部分工作。

+0

這是行不通的,因爲變量定義本身是錯誤的。 '意外的標記「<數字 - 文字>」超出表達結束「。 – 2011-06-08 11:08:02

+0

這就是我指出的不是嗎?看來OP不知道XSLT文件中的其他代碼只有1個particualr行。因此,如果使用無效變量聲明(unseen),假設他的代碼將運行是不安全的。 – Fishcake 2011-06-08 11:49:01