xslt:XPath选择具有特定属性值的元素

时间:2016-04-26 12:32:17

标签: xslt

输入:

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

以上编码不正确..请给出建议。

1 个答案:

答案 0 :(得分:1)

这行有问题:

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

首先,条件会选择所有xref个元素,但您只需要找到当前p个元素。其次,如果xref元素具有rid属性,则会选择rid元素,但实际上您要选择xsl:value-of属性。您还真的想在这里使用<xsl:value-of select="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>

实际上,您可以使用属性值模板将其简化为:

... + geom_errorbarh(aes(xmin = LowInner, 
    xmax = HighInner), height = 0.5, lwd = 1, position = position_dodgev(height = 0.8))