0

XHTML でこの XSL 変換に問題があります。

私のソースドキュメントのイラスト:

<blockquote>
    <center>
       <h1>CHAPTER 100. RANDOM TEXT HERE </h1>
    </center>
    <center>
       <h1>CHAPTER 200. RANDOM TEXT HERE </h1>
    </center>
</blockquote>

私の望む出力:

<title chapter="100"> CHAPTER 100. RULES OF SOMETHING TEXT HERE </title>
<title chapter="200"> CHAPTER 200. RULES OF SOMETHING TEXT HERE </title>

これを XSLT スタイルシートに追加する方法についてのアイデアはありますか? ここで正規表現を使用して、チャプター # で一致させることができますか?

前もって感謝します。

4

3 に答える 3

3

まあ、それは次のようなものを含むでしょう

<xsl:template match="h1">
  <title chapter="{replace(., 'CHAPTER\s+(\d+)', '$1')}">
    <xsl:apply-templates/>
  </title>
</xsl:template>
于 2012-09-21T21:39:59.623 に答える
1

示されているフォームの入力が与えられた場合、XSLT 1.0 では次のようなことができます (テストされていません)。

<xsl:template match="h1">
  <title chapter="{
      substring-before(
        substring-after(.,'CHAPTER '),
        '. '
      )}">
    <xsl:apply-templates/>
  </title>
</xsl:template>

これにより、不規則な入力に対して次善の結果が生じる可能性があります。

XSLT 2.0 では、(Michael Kay がちょうど観察したように) 入力の不規則性をより便利に処理できる、より豊富な正規表現関数のセットがあります。、および関数は読む価値がmatches()あります。tokenize()replace()

于 2012-09-21T21:44:32.197 に答える
0

ソースが HTML であると仮定すると、それを純粋な XML に変換する必要があります。

ソース ドキュメント全体を DOM ツリーにロードし、そこからターゲット XML を作成します。ほとんどすべての言語には、ソースを文字列またはファイルから DOM ツリーに読み込む方法があります。この目的で SAX パーサーを使用することもできます。入力を目的の出力に変換するパーサー用のコードを記述するだけです。

正規表現を使用して実行することもできますが、出力の有効性を確認する方法はありません。実際のツリー/パーサーを使用すると、これらすべての機能 (weather DOM/SAX など) を使用できます。

于 2012-09-21T20:58:28.087 に答える