Sitecore项guid没有花括号

时间:2011-05-22 09:28:39

标签: xslt sitecore

从xslt中的Sitecore项目@id输出中删除/替换{}个字符的最佳方法是什么?

问题: 我必须从id属性中识别我的html中的某些标签。使用名称是危险的,因为Sitecore最终用户可能会在名称中键入空格或非法字符。

另一方面,使用item id导致html中的id说:id="{xxxxxxxx-xxx(...)},在这种情况下,{}作为html id属性中的字符是非法的。

所以: 从xslt @id输出中删除/替换{}个字符的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

我不熟悉Sitecore,但是使用XSLT / XPath,表达式translate(@id, '{}', '')应该足以从id属性值中删除任何花括号。但是请注意使用属性值模板的任何XSLT代码,因为花括号具有特殊含义。因此<xsl:value-of select="translate(@id, '{}', '')"/>是安全的,因为select属性不被视为属性值模板。

答案 1 :(得分:1)

执行此操作的正确方法是使用NormalizeGuid。

我在MainUtils之前使用过(在Sitecore V5上)NormalizeGuid方法。 我刚刚在Sitecore 6.2上进行了测试,但由于有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中使用。

答案 2 :(得分:1)

感谢Martin,使用translate()函数帮助了我,但你的答案并不完整。

问题 - 正如我所理解的那样 - 是关于在HTML中的角括号内剥去花括号,但遗憾的是<xsl:value-of select="..."/>无法正常工作。

考虑这个(非法的)代码:

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

相反,请使用:

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

答案 3 :(得分:0)

您可以这样做,只包含连字符:

item.ID.Guid.ToString("D")

或者,您可以使用以下格式:

  1. D:连字符 fed3f822-e79f-4318-a99d-aaf75feea459
  2. N:数字 fed3f822e79f4318a99daaf75feea459
  3. B:大括号 {fed3f822-e79f-4318-a99d-aaf75feea459}
  4. P:括号(fed3f822-e79f-4318-a99d-aaf75feea459)