0

私は XSLT の初心者であり、プログラマーではないため、愚かな質問をして申し訳ありません。

次のような特定の引用を見つける必要があります。

BSK StPO-`<emphasis role="smallcaps">Burger,</emphasis>` Art. 4 N 5

para引用を含むテキスト ノードは、 や など、さまざまな親要素内に配置できますfootnote

refid引用の一部をIDとして使用して、引用全体を要素にラップしたいよりも。

<refid multi-idref="K_BSK_STPO-JSTPO_StPO_Art4_5">
    BSK STGB I-`<span class="smallcaps">Burger,</span>` Art. 4 N 5
</refid>`

問題はemphasis要素です。それを「回避」する方法が見つかりません。同様の質問に対するこの回答を見つけて、それを自分の問題に適用しようとしましたが、成功しませんでした。このスクリプト パーツでは引用が見つかりません。

これが私のコードの一部です。$DokumentNameグローバルに定義されたパラメータを参照します。引用のローマ数字の部分はオプションです。

<xsl:template match="text()[matches(., 'BSK\s+(\p{L}{2,5})\s+(I|II|III|IV|V|VI|VII)?\p{P}')]">
  <xsl:variable name="vCur" select="."/>
  <xsl:variable name="pContent" select="string(.)"/>
  <xsl:analyze-string select="$pContent" regex="BSK\s+(\p{{L}}{{2,5}})\s+(I|II|III|IV|V|VI|VII)?\p{{P}}" flags="i">
    <xsl:matching-substring>
      <xsl:variable name="figureToTargetId">
        <xsl:choose>
          <xsl:when test="matches(., 'BSK\s+(\p{L}{2,5})\s+(I|II|III|IV|V|VI|VII)?\p{P}')">                  
            <xsl:analyze-string select="." regex="(\p{{L}}{{2,5}})\s+(I|II|III|IV|V|VI|VII)">
              <xsl:matching-substring>
                <xsl:value-of select="concat($DokumentName, '_', regex-group(1), regex-group(2))"/>
              </xsl:matching-substring>
            </xsl:analyze-string>
          </xsl:when>
          <xsl:otherwise>
            <xsl:analyze-string select="." regex="(\p{{L}}{{2,5}})">
              <xsl:matching-substring>
                <xsl:value-of select="concat($DokumentName, '_', regex-group(1))"/>
              </xsl:matching-substring>
            </xsl:analyze-string>
          </xsl:otherwise>
        </xsl:choose>   
      </xsl:variable>
      <xsl:variable name="figureFromTargetId">
        <xsl:if test="matches($vCur, 'BSK\s+(\p{L}{2,5})\s+(I|II|III|IV|V|VI|VII)?\p{P}')">
          <xsl:analyze-string select="string($vCur/following-sibling::emphasis[1]/following-sibling::*[1])" regex=",?Art\.\s+(d+)\s+N\s+(d+)">
            <xsl:matching-substring>
              <xsl:value-of
                select="concat('_Art', regex-group(1), '_', regex-group(2))"/>
            </xsl:matching-substring>
          </xsl:analyze-string>
        </xsl:if>
      </xsl:variable>
      <xsl:element name="ref-multi-id">
        <xsl:attribute name="multi-idref">
          <xsl:value-of select="concat($figureToTargetId, $figureToTargetId)"/>
        </xsl:attribute>
        <xsl:value-of select="."/>
        <xsl:if test="matches($vCur, 'BSK\s+(\p{L}{2,5})\s+(I|II|III|IV|V|VI|VII)?\p{P}')">
          <xsl:apply-templates select="$vCur/following-sibling::emphasis[1]" mode="copy-style"/>
          <xsl:value-of select="$vCur/following-sibling::emphasis[1]/following-sibling::*[1][matches(.,',?Art\.\s+(d+)\s+N\s+(d+)')]"/>
        </xsl:if>
      </xsl:element>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
      <xsl:value-of select="."/>
    </xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:template>

<xsl:template match="emphasis[@role='smallcaps']" mode="copy-style">
  <xsl:element name="span">
    <xsl:attribute name="class">
      <xsl:value-of select="@role"/>
    </xsl:attribute>
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

どんな助けでも本当に感謝します!

4

2 に答える 2

0

ハイフンがある場所に空白が必要なため、正規表現は表示する文字列と一致しません。のように見えます

BSK\s+(\p{L}{2,5})\s+(I|II|III|IV|V|VI|VII)?\p{P}

する必要があります

BSK\s+(\p{L}{2,5})(\s+(I|II|III|IV|V|VI|VII))?\p{P}
于 2013-05-22T14:07:59.310 に答える