0

私は以下のxmlケースを持っています

ケース1:

<tertiaryie level="1">application filing, 11.112</tertiaryie>

ケース 2:

<tertiaryie level="1">application filing, 1.112</tertiaryie>

そして、以下の正規表現を適用すると。

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="text()">
    <xsl:analyze-string select="." regex="(([Cc]hapter)\s(\d+))">
      <xsl:matching-substring>
        <a href="{concat('er:#AHK_CH_',regex-group(3))}">
          <xsl:value-of select="."/>
        </a>
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:analyze-string select="." regex="([0-9])\.([0-9]+)">
          <xsl:matching-substring>
            <a
              href="{concat('er:#AHK_CH_',format-number(number(regex-group(1)),'00'),'/P',format-number(number(regex-group(1)),'00'),'-',regex-group(2))}">
              <xsl:value-of select="."/>
            </a>
          </xsl:matching-substring>
          <xsl:non-matching-substring>
            <xsl:value-of select="."/>
          </xsl:non-matching-substring>
        </xsl:analyze-string>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:template>

</xsl:stylesheet>

私が得る出力は以下の通りです。ケース1:

 application filing, 1<a href="er:#CHK_CH_01/P01-112">1.112</a>

ケース 2:

application filing, <a href="er:#CHK_CH_01/P01-112">1.112</a>

正規表現は 2 番目のケースでは正常に機能しますが、最初のケースでは機能しません。最初のケースでは、番号 1 が削除され、アンカー タグの前に来ています。以下のように出力する方法を教えてください。いずれかの条件をチェックして出力を提供するテンプレートが必要です。そして、ここではケース 2 の出力が正しいです。

application filing, <a href="er:#CHK_CH_11/P11-112">11.112</a>

ありがとう

4

1 に答える 1