使用XSLT TBB中的tcmse:PublishBinary与XSLT介体时出错

时间:2012-06-07 10:56:55

标签: tridion tridion-2011 tridion2009

我正在使用SDL Tridion 2011 SP1中的XSLT TBB。我正在使用从Tridion站点下载的XSLT中介。

我创建了一个TBB来检索图像,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:simple="uuid:c5e80ef4-9afd-421a-9205-d5af4c9f2c5c" 
    xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tcm="http://www.tridion.com/ContentManager/5.0"
    xmlns:tcmse=”http://www.tridion.com/ContentManager/5.1/TcmScriptAssistant”
    exclude-result-prefixes="msxsl simple">

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

    <xsl:template match="/">
        <xsl:element name="p">
            <xsl:apply-templates select="tcm:Component/tcm:Data/tcm:Content/simple:Content"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="simple:Content">
        <xsl:element name="img">
            <xsl:attribute name="src">
                <xsl:value-of select="tcmse:PublishBinary(string(simple:photo/@xlink:href)))"/>
            </xsl:attribute>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

我收到错误

  [CDATA[Unable to retrieve rendered data from Component Presentation.]]>
</tcm:Line>
<tcm:Line ErrorCode="80040000" Cause="true">
    <![CDATA[
     Cannot find a script or an extension object associated with namespace
     'http://www.tridion.com/ContentManager/5.1/TcmScriptAssistant'.]]

我明白这个问题是由于     'http://www.tridion.com/ContentManager/5.1/TcmScriptAssistant'。

任何人都可以提出克服它所需的修改吗?

我是否需要更改TBB或组件模板中的任何内容。

谢谢。

2 个答案:

答案 0 :(得分:4)

tcmse:XSLT Mediator未实现PublishBinary。这是默认 XSLT模板引擎的功能,而不是Mediator引擎。

要使用XSLT Mediator发布二进制文件,您可以执行以下操作:

<xsl:element name="img">
  <xsl:attribute name="src">
    <xsl:value-of select="simple:image/@xlink:href"/>
  </xsl:attribute>
</xsl:element>

然后确保使用默认完成操作,或者至少使用“从HTML中提取二进制文件”和“在包中发布二进制文件”TBB

(摘自http://yoavniran.wordpress.com/2009/07/11/implementing-the-xslt-mediator-part-1/

答案 1 :(得分:3)

XSLT Mediator允许您向XSLT Extension对象添加新方法,您可以在XSLT Mediator包中提供的“XSLT Template Helper”类中找到它。

为了使用它,您需要在XSLT模板中添加“http://www.sdltridion.com/ps/XSLTHelper”命名空间,如xmlns:ext =“http://www.sdltridion.com/ PS / XSLTHelper”。

下面显示了PublishBinary方法的示例。

public string PublishBinary(string tcmUri)
{
  Component mComponent = new Component(new TcmUri(tcmUri), session);
  Binary binary = engine.PublishingContext.RenderedItem.AddBinary(mComponent);
  return binary.Url;
}

public string PublishBinary(string tcmUri, string sgTcmUri)
{
  Component mComponent = new Component(new TcmUri(tcmUri), session);
  StructureGroup sg = new StructureGroup(new TcmUri(sgTcmUri), session);
  Binary binary = engine.PublishingContext.RenderedItem.AddBinary(mComponent,sg);
  return binary.Url;
}

你可以使用这样的方法。

<xsl:element name="img">
    <xsl:attribute name="src">
        <xsl:value-of select="ext:PublishBinary(string(@xlink:href))" />
    </xsl:attribute>
</xsl:element>