4

別のコンポーネントへのリンクを持つコンポーネント用の 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 を作成する方法を教えてくれる人はいますか?

ありがとうございました。

4

4 に答える 4

4

「このコンポーネントのリンクを処理する」とはどういう意味か説明してください。

このリンクされたコンポーネントと、コンテンツ マネージャー側の TBB 内のそのフィールドにアクセスしたいということですか、それとも、Web サイト上の他のコンポーネントにリンクするアンカー タグを HTML に出力したいということですか?

于 2012-04-20T09:34:32.650 に答える
4

リンクされたコンポーネントからフィールドにアクセスするには、ドキュメント関数を使用してそれをロードする必要があります。リンクされたコンポーネントが別のスキーマに基づいている可能性があることに注意してください。したがって、次のような別の名前空間があります。

コンポーネント 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 で "//" を使用しましたが、これはパフォーマンスの観点からは理想的ではありません。

なんらかの理由で、リンクされたコンポーネントがどのスキーマ (したがって名前空間) に基づいているかがわからない場合は、$LINKED_COMPONENT//*[local-name()='Text']表記法を使用することもできますが、これもパフォーマンス ヒットになります。

于 2012-04-20T15:46:12.630 に答える
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>

したがって、これはマルチメディア コンポーネントをロードし、メタデータ フィールドから値を抽出します。

于 2012-04-20T09:28:24.153 に答える