从xslt中的Sitecore项目@id输出中删除/替换{}
个字符的最佳方法是什么?
问题:
我必须从id
属性中识别我的html中的某些标签。使用名称是危险的,因为Sitecore最终用户可能会在名称中键入空格或非法字符。
另一方面,使用item id导致html中的id说:id="{xxxxxxxx-xxx(...)}
,在这种情况下,{}
作为html id属性中的字符是非法的。
所以:
从xslt @id输出中删除/替换{}
个字符的最佳方法是什么?
答案 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")
或者,您可以使用以下格式: