XSLTを利用できるのは1.0です。XSLTを使用してノード値を取得するために異なるノードハンドルを一致させる
XMLベースのCMS(Symphony CMS)のデュアル言語サイトで作業しています。カテゴリ名の英語版をフランス語版に置き換える必要があります。
これは私のソースXMLです。
<data>
<our-news-categories-for-list-fr>
<entry id="118">
<title-fr handle="technology">Technologie</title-fr>
</entry>
<entry id="117">
<title-fr handle="healthcare">Santé</title-fr>
</entry>
</our-news-categories-for-list-fr>
<our-news-article-fr>
<entry id="100">
<categories>
<item id="117" handle="healthcare" section-handle="our-news-categories" section-name="Our News categories">Healthcare</item>
<item id="118" handle="technology" section-handle="our-news-categories" section-name="Our News categories">Technology</item>
</categories>
<main-text-fr mode="formatted"><p>Blah blah</p></main-text-fr>
</entry>
</our-news-article-fr>
</data>
これは現在フランス語版のXSLTの一部です。
<xsl:template match="data">
<xsl:apply-templates select="our-news-article-fr/entry"/>
</xsl:template>
<xsl:template match="our-news-article-fr/entry">
<xsl:if test="categories/item">
<p class="category">In:</p>
<ul class="category">
<xsl:for-each select="categories/item">
<li><a href="{/data/params/root}/{/data/params/root-page}/our-news/categorie/{@handle}/"><xsl:value-of select="."/></a></li>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:template match>
問題:アンカー(<xsl:value-of select="."/>
)の目に見えるテキストは、カテゴリタイトルの英語版を提供します。
次のノードのハンドルは一致しています(すべてのハンドルは英語です)。したがって、私は他のノードと一致する必要があると考えています。
/data/our-news-categories-for-list-fr/entry/title-fr/@handle
(タイトル-FRノードの値は、カテゴリタイトルのフランス語翻訳したものです)
/data/our-news-article-fr/entry/categories/item/@handle
私はXSLTに新たなんだと、これを行う方法を見つけるのに苦労しています。
多くのありがとうございます。
<タイトル-FRハンドル=」:ドキュメントのルートがある
data
場合は明らかに絶対ロケーションパスを使用することができます。必要な述語はcurrent()
機能を使用して、現在のコンテキストに対して一致している必要がありますヘルスケア ">Santé 有効なタグは使用できません。 – Mike@ user639175ありがとうございました。 –
+1良い質問です。単純なXPathの場所パスでこれを行う方法を知っている私の答えを参照してください。 –