如何通过XSLT查看基于xml:id的pub年份?

时间:2014-06-03 09:14:55

标签: xml xslt

我在xml中使用此代码

参考引文XML中的LINKS:

   Boulos <link href="#bib-0014"/>   

对应参考:

  <bib xml:id="bib-0014"><citation type="journal" xml:id="cit-0014"><author><familyName>Boulos</familyName>, <givenNames>L</givenNames></author>. **<pubYear year="1974">1974a</pubYear>**. <articleTitle>R&#x00E9;vision syst&#x00E9;matique du genre <i>Sonchus</i> L. s.l. V. Sous&#x2010;genre 2. <i>Dendrosonchus</i>. &#x2013; Bot</articleTitle>. <journalTitle>Not</journalTitle>. <vol>127</vol>: <pageFirst>7</pageFirst>&#x2013;<pageLast>37</pageLast>.</citation></bib>

图形引用XML链接:

   Fig <link href="#ecog340-fig-0001"/>

相应的数字:

      <figure xml:id="ecog340-fig-0001">
      <mediaResourceGroup>
      <mediaResource alt="image" href="urn:x-wiley:16000587:media:ecog340:ecog340-fig-0001"/>
      <mediaResource alt="image" mimeType="image/png" href="image_n/ecog340-fig-0001.png" rendition="webOriginal" />
      <mediaResource alt="image" mimeType="image/gif" href="image_t/ecog340-fig-0001-t.gif" rendition="webLoRes" />
      <mediaResource alt="image" mimeType="image/png" href="image_m/ecog340-fig-0001-m.png" rendition="webHiRes" />
      </mediaResourceGroup>
      <caption>
      <p>........</p>
      </caption>
      </figure>

表格引用XML链接:

   Table <link href="#ecog340-tbl-1"/>

对应表:

    <tabular xml:id="ecog340-tbl-1">
    <title type="main">......</title>

在XSLT中使用:

    <xsl:template match="link">
    <a href="{@href}"><xsl:value-of select="@href"/>
    <xsl:value-of select="."/> 
    </a>
    </xsl:template>

在Browserview中:

Boulos#bib-0014

图#ecog340-fig-0001

表#ecog340-tbl-1

但我希望它应该查看所有带年份的参考链接

Boulos 1974a

使用数字(基于id - 省略零)

图1

带号码(基于id)

表1

你能取悦吗?

1 个答案:

答案 0 :(得分:0)

我定义了一个键

<xsl:key name="bibById" match="bib" use="@xml:id"/>

然后在link模板中,您可以获得

年份
<xsl:value-of select="key('bibById', substring-after(@href, '#'))/citation/pubYear" />

将问题扩展到表格和数字,我采用了更灵活的方法 - 允许密钥接收figuretabular元素以及{{1} }:

bib

以特殊模式定义模板以处理各种情况

<xsl:key name="xrefById" match="bib|tabular|figure" use="@xml:id"/>

现在在<xsl:template match="bib" mode="xref"> <xsl:value-of select="citation/pubYear" /> </xsl:template> <xsl:template match="*" mode="xref"> <!-- take everything after the second dash in the id and treat as number --> <xsl:value-of select=" number(substring-after(substring-after(@xml:id, '-'), '-'))" /> </xsl:template> 模板中,您可以使用

link

它将为每种交叉引用做正确的事。