Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用XSLT中介在tridion SDL tridion 2011 SP1中处理XSLT中的链接组件_Xslt_Xpath_Tridion - Fatal编程技术网

如何使用XSLT中介在tridion SDL tridion 2011 SP1中处理XSLT中的链接组件

如何使用XSLT中介在tridion SDL tridion 2011 SP1中处理XSLT中的链接组件,xslt,xpath,tridion,Xslt,Xpath,Tridion,我正在为链接到另一个组件的组件创建XSLT TBB 考虑我的组件名是“A”,它与另一个组件“B”有链接 组件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"></Name> </Con

我正在为链接到另一个组件的组件创建XSLT TBB

考虑我的组件名是“A”,它与另一个组件“B”有链接

组件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"></Name>
</Content>

B部分来源是:

<Content xmlns="Some UUID">
    <first>first filed</first>
    <second>second field</second>
</Content>

第一场
第二场
有人能帮我写一个XSLT TBB,从这个链接的组件输出值吗


谢谢。

要输出组件链接到的图像,请查看以下内容:


编辑:要输出链接零部件的其他字段,请参见本节:

例如:

<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>


因此,这将加载多媒体组件,然后从元数据字段中提取一个值。

请解释“处理此组件链接”的含义


您的意思是要访问content manager端TBB中的此链接组件及其字段吗,或者,您的意思是想在HTML中输出一个锚定标记,该标记将链接到您网站上的其他组件?

为了访问链接组件中的字段,您需要使用document函数加载该组件,请随时发现链接组件可能基于不同的架构,因此,具有不同的名称空间,如下所示:

<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>
组件A


组件B


一些价值
然后,可以变换零部件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中使用了“/”,以使代码更易于阅读,但从性能角度来看,这并不理想


如果出于某种原因,您不知道链接组件将基于什么模式(以及名称空间),那么您也可以使用
$linked\u Component//*[local-name()='Text']
符号,但这将再次带来性能影响。

以下是从多值组件链接中提取一些字段的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>


您可以共享XSLT中当前的内容吗?我实际上想访问链接的组件字段,在content Manager端的我的TBB中。感谢Puf提供的信息。此方法允许我们从链接的组件访问字段。
<?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>
<!-- 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>