1

部分的にマークアップされたOCRedドキュメントが多数あります。目次内に機能するリンクを作成しようとしています。目次はフォーマットされています

<document>
  <text>
     <list>
        <item>Chapter 1<ref>7</ref></item>
        <item>Chapter 2<ref>27</ref></item>
        <item>Chapter 3<ref>54</ref></item>
        <item>Chapter 4<ref>77</ref></item>
     </list>
     <body>
      OCRED text <pb n="7-8" xml:id="VAB0003"/> OCRED text
     </body>   
</document>

refの値がpbの@nの値の一部と同じであるかどうかをテストし、同じである場合は@xml:idの値をプルしてref要素で使用する方法はありますか?これを達成するためのより複雑でない方法はありますか?

4

1 に答える 1

0

私はあなたがこのようなものを探していると思います:

<xsl:template match="ref*">
  <xsl:variable name="page" select="."/>
  <xsl:variable name="target" 
                select="//pb[contains(
                        concat(' ',translate(@n,'-',' '),' '), 
                        concat(' ',$page,' '))]/@xml:id"/>
  <xsl:copy>
    <xsl:if test="$target">
      <xsl:attribute name='target'>
        <xsl:value-of select="$target"/>
      </xsl:attribute>
    </xsl:if>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

target複雑な連結は、ページ番号の完全なトークンと一致することを保証するための定義にあります。XSLT 2.0では、コンキャットなしでもう少し優雅に実行できますが、それほど簡潔には実行できません。

于 2012-10-17T01:23:56.193 に答える