我正在为一个链接到另一个组件的组件创建XSLT TBB。
考虑我的组件名称是“A”,它具有到另一个组件“B”的链接。
组件来源如下所示:
<Content xmlns="Some UUID">
<Name xlink:type="simple" xlink:href="tcm:184-1897"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="B"></Name>
</Content>
组件B来源是:
<Content xmlns="Some UUID">
<first>first filed</first>
<second>second field</second>
</Content>
任何人都可以帮助我编写如何编写从此链接组件输出值的XSLT TBB吗?
谢谢。
答案 0 :(得分:4)
请解释“处理此组件链接”的含义。
您是说要在内容管理器端访问TBB中的此链接组件及其字段,还是表示您希望在HTML中输出将链接到您的其他组件的锚标记?网站?
答案 1 :(得分:4)
为了从链接组件访问字段,您需要使用文档函数加载它,保持链接组件可能基于不同的模式,因此具有不同的名称空间,如下所示: / p>
组件A
<Content xmlns="Some UUID">
<Name xlink:type="simple"
xlink:href="tcm:184-1897"
xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:title="B"/>
</Content>
组件B
<Content xmlns="Some Other UUID">
<Text>Some Value</Text>
</Content>
然后,您可以转换组件A并访问链接的组件B,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:main="Some UUID"
xmlns:link="Some Other UUID"
xmlns:xlink="http://www.w3.org/1999/xlink" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="LINKED_COMPONENT" select="document(//main:Name/@xlink:href)"/>
<xsl:value-of select="$LINKED_COMPONENT//link:Text"/>
</xsl:template>
</xsl:stylesheet>
请注意,我在XPath中使用了“//”来使代码更易于阅读,但从性能角度来看,这并不理想。
如果由于某种原因你不知道链接组件将基于什么Schema(以及命名空间),你也可以使用$LINKED_COMPONENT//*[local-name()='Text']
表示法,但这会再次引入性能。
答案 2 :(得分:3)
要输出组件链接到的图像,请查看以下内容: http://yoavniran.wordpress.com/2009/07/11/implementing-the-xslt-mediator-part-1
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="simple:image/@xlink:href"/>
</xsl:attribute>
</xsl:element>
修改:要输出链接组件的其他字段,请参阅此部分:http://yoavniran.wordpress.com/2009/07/11/implementing-the-xslt-mediator-part-1/#complink
来自那里的一个例子:
<xsl:attribute name="alt">
<xsl:value-of select="document(simple:image/@xlink:href)/tcm:Component/tcm:Data/tcm:Metadata/image:Metadata/image:altText"/>
</xsl:attribute>
因此,这会加载多媒体组件,然后从元数据字段中提取值。
答案 3 :(得分:1)
以下是从多值组件链接中提取某些字段的XSLT代码。请记住,组件链接属于同一模式。
<!-- language: xml -->
<xsl:for-each select="base:componentLink">
<xsl:element name="div">
<xsl:variable name ="LinkedComponent" select="document(./@xlink:href)"></xsl:variable>
<xsl:value-of select="$LinkedComponent/tcm:Component/tcm:Data/tcm:Content/linked:Teaser/linked:LinkText"/>
</xsl:element>
</xsl:for-each>