2016-04-26 25 views
0

入力:XSLT:XPathの特定の属性値を持つ選択要素

<list list-type="simple" specific-use="front"> 
    <list-item><p>Preface <xref rid="b-9781783084944-FM-001" ref-type="sec">00</xref></p></list-item> 
    <list-item><p>Series Title <xref rid="b-9781783084944-FM-003" ref-type="sec">00</xref></p></list-item> 
    <list-item><p>Dedication</p></list-item> 
    <list-item><p>Acknowledgments <xref rid="b-9781783084944-FM-005" ref-type="sec">00</xref></p></list-item> 
    <list-item><p>Contributors <xref rid="b-9781783084944-FM-006" ref-type="sec">00</xref></p></list-item> 
    <list-item><p>Glossary <xref rid="b-9781783084944-FM-008" ref-type="sec">00</xref></p></list-item> 
</list> 

私は

<div class="pagebreak" id="b-9781783084944-FM-002"> 
    <h2 class="PET"><a href="#tocb-9781783084944-FM-002">CONTENTS</a></h2> 
    <div class="TocPrelims"><a href="#b-9781783084944-FM-001">Preface</a></div> 
    <div class="TocPrelims"><a href="#b-9781783084944-FM-002">Series Title</a> </div> 
</div> 

マイXSLT以下の出力リクが必要になります。私のコーディング上

<xsl:template match="list[@specific-use='front'][@list-type='simple']/list-item/p"> 
    <div class="TocPrelims"> 
    <a> 
     <xsl:attribute name="href"> 
      <xsl:text>#toc</xsl:text> 
     <xsl:copy-of select="//list[@specific-use='front'][@list-type='simple']/list-item/p/xref[@rid]"/> 
     </xsl:attribute> 
     <xsl:apply-templates/> 
    </a> 
    </div> 
</xsl:template> 

が正しくありません。 .. plsは示唆を与える。

<xsl:copy-of select="//list[@specific-use='front'][@list-type='simple']/list-item/p/xref[@rid]"/> 

まず、条件がすべてxrefの要素を選択しますが、あなただけが上に配置されている現在のpのための1つを必要とする:

+1

また、本当にここ

<xsl:value-of select="xref/@rid"/> 

xsl:value-ofを使用する代わりに、このテンプレートを試してみたいですあなたの質問のコードの書式を改善してください。質問を編集してコードサンプルを強調表示する場合は、 '{}'ボタンをクリックしてフォーマットすると(各行の前に4つのスペースがあります)、読みやすくなります。ありがとうございました! –

+0

@Raja Ananth、以下の答えがあなたの要件に合っていれば、右のマークをチックで受け入れます。 –

答えて

1

あなたはこのラインに問題があります。第2に、rid属性を持つ場合はxref要素を選択していますが、実際にはrid属性を選択する必要があります。

<xsl:template match="list[@specific-use='front'][@list-type='simple']/list-item/p"> 
    <div class="TocPrelims"> 
     <a> 
     <xsl:attribute name="href"> 
      <xsl:text>#toc</xsl:text> 
      <xsl:value-of select="xref/@rid"/> 
     </xsl:attribute> 
     <xsl:value-of select="text()[1]" /> 
     </a> 
    </div> 
</xsl:template> 

実際には、あなたがこれにそれを簡素化するために属性値テンプレートを利用することができます:

<xsl:template match="list[@specific-use='front'][@list-type='simple']/list-item/p"> 
    <div class="TocPrelims"> 
     <a href="#toc{xref/@rid}"> 
     <xsl:value-of select="text()[1]" /> 
     </a> 
    </div> 
</xsl:template> 
関連する問題