2011-05-22 74 views
1

什麼是最好的方式來從Sitecore項目@id輸出xslt中去除/替換{}字符?Sitecore項目guid沒有大括號

問題: 我必須標識我的html中的某些標籤,其屬性爲id。使用名稱很危險,因爲Sitecore最終用戶在名稱中輸入空格或非法字符的風險。

另一方面,使用item id會導致html中的id說:id="{xxxxxxxx-xxx(...)},在這種情況下,{}作爲html id屬性中的字符是非法的。

因此: 從xslt @id輸出中去除/替換{}字符的最佳方法是什麼?

+0

是您正在使用AVT,不知道如何表示裏面的花vrackets問題?答案是,他們必須加倍逃脫。因此,在AVT中使用'{{'而不是'{'和'}}'而不是'} – 2011-05-22 16:10:39

回答

1

正確的做法是使用NormalizeGuid。

我以前使用過(在Sitecore V5上)NormalizeGuid方法來自MainUtils。 我剛剛在Sitecore 6.2上進行了測試,但因爲有兩個相同的方法名而被打破。這會產生一個XslTransformException

您正在使用哪個版本的Sitecore?我建議嘗試NormalizeGuid:

雲一樣的東西:

的Web.Config

<extension mode="on" type="Sitecore.MainUtil, Sitecore.Kernel" namespace="http://www.sitecore.net/util" singleInstance="true"/> 

XSLT

xmlns:util="http://www.sitecore.net/util" 

<xsl:variable name="itmId"><xsl:value-of select="@id"/></xsl:variable> 
<xsl:value-of select="util:NormalizeGuid($itmId)"/> 

如果你RTE是可能用自定義包裝類來修復它。 Take a look this post

其實,我想你可以通過使用GenerateShortID()來解決這個問題,它也在MainUtil中。

+0

感謝關於GenerateShortID()的提示! – 2011-05-25 20:46:16

2

我對Sitecore不熟悉,但使用XSLT/XPath時,表達式translate(@id, '{}', '')應該足以從id屬性值中刪除任何大括號。然而,使用屬性值模板的任何XSLT代碼都要小心,因爲花括號具有特殊含義。因此<xsl:value-of select="translate(@id, '{}', '')"/>是安全的,因爲select屬性不被視爲屬性值模板。

+0

感謝您的回答 - 當然是一種解決方法... – 2011-05-25 20:47:48

1

感謝馬丁,使用translate()函數幫了我,但你的答案並不完整。

這個問題 - 據我瞭解 - 是關於剝離HTML中角度大括號內的花括號,這裏<xsl:value-of select="..."/>不幸的是不會工作。

考慮這個(非法)代碼:

<div id="<xsl:value-of select="translate(@id, '{}', '')"/>">` 

相反,使用這樣的:

<div id="{translate(@id, '{}', '')}">