【问题标题】:Creating links within a document using a preexisting Table of Contents使用预先存在的目录在文档中创建链接
【发布时间】:2012-10-06 01:57:55
【问题描述】:

我有大量已部分标记的 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 元素中使用它? 有没有更简单的方法来实现这一点?

【问题讨论】:

  • 尽量让你的标题简短且具有描述性!!
  • n 属性是否总是由两部分组成,还是可以包含多个连字符?
  • 它代表页码。它有时由两部分组成,格式为 n-n(或 nn-nn 或 nnn-nnn),有时只有一个没有破折号的部分。

标签: xml xslt xpath tableofcontents


【解决方案1】:

我认为您正在寻找这样的东西:

<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 中,它可以更优雅地完成并且没有 concats,但不会更简洁。

【讨论】:

  • 如果您的问题得到了满意的回答,Stack Overflow convention 供您单击答案旁边的复选标记大纲。 (听起来老生常谈,你让系统给出答案的作者的声誉点,当你这样做时,结果会令人惊讶地激励。)
猜你喜欢
  • 2012-12-17
  • 1970-01-01
  • 2021-10-18
  • 2012-07-25
  • 1970-01-01
  • 2017-11-21
  • 2013-03-15
  • 2020-08-07
  • 2014-04-07
相关资源
最近更新 更多