1

XSLT でこの種のテキストを解析することは可能ですか:

詳細|Numéro appelé|Date et heure|Quantité réelle|Qantité facturée|HT|TTC
移植可能なアプリケーション|0611XXXXXX|14/06 - 09h32|00h00mn23s|00h00mn23s|無料|無料
移植可能なアプリケーション|0688XXXXXX|14/06 - 10h39|00h01mn16s|00h01mn16s|無料|無料
移植可能なアプリケーション|0611XXXXXX|18/06 - 07h24|00h00mn50s|00h00mn50s|無料|無料
移植可能なアプリケーション|0688XXXXXX|20/06 - 09h32|00h00mn23s|00h00mn23s|無料|無料
移植可能なアプリケーション|0688XXXXXX|20/06 - 10h44|00h01mn27s|00h01mn27s|無料|無料
移植可能なアプリケーション|0611XXXXXX|25/06 - 21h09|00h00mn22s|00h00mn22s|無料|無料
移植可能なアプリケーション|0626XXXXXX|29/06 - 11h25|00h00mn27s|00h00mn27s|無料|無料
移植可能なアプリケーション|0688XXXXXX|02/07 - 13h39|00h02mn37s|00h02mn37s|無料|無料

このテーブルは変数内のコンテンツであり、「|」を置き換えたい 文字で</td><td><th>可能であれば最初の行に)追加し<tr>ます。

そして... XSLT 1.0でこれを行います。

どうもありがとう。

4

4 に答える 4

0

拡張機能を使用しないと苦痛になり、外部パラメーターとして渡すか、いくつかのタグ内に配置する必要があります。Xsltは、テキストファイルではなく、Xmlファイルの変換に関するものなので、作業に適したツールを使用してください。

于 2012-10-09T23:05:14.870 に答える
0

これがあなたがやりたいことをするための簡単なPerlスクリプトです

my $tag = "th";
while(<>)
{
    s/[\r\n]*$//;
    print "<$tag>\n";
    for $f (split /\|/)
    {
        print "<td>$f</td>\n";
    }
    print "</$tag>\n";
    $tag = "tr";
}

アクセントのある文字が壊れないように、実行する場所(WIndowsとLinux)によっては、文字エンコードをいじる必要がある場合があります。私はあなたのための練習としてそれを残します。

入力の最初の3行からの出力は次のとおりです。

<th>
<td>D▒tail</td>
<td>Num▒ro appel▒&lt;/td>
<td>Date et heure</td>
<td>Quantit▒ r▒elle</td>
<td>Qantit▒ factur▒e</td>
<td>H.T.</td>
<td>T.T.C.</td>
</th>
<tr>
<td>Appel vers un portable</td>
<td>06110XXXXX</td>
<td>14/06 - 09h32</td>
<td>00h00mn23s</td>
<td>00h00mn23s</td>
<td>gratuit</td>
<td>gratuit</td>
</tr>
<tr>
<td>Appel vers un portable</td>
<td>06889XXXXX</td>
<td>14/06 - 10h39</td>
<td>00h01mn16s</td>
<td>00h01mn16s</td>
<td>gratuit</td>
<td>gratuit</td>
</tr>
于 2012-10-10T03:07:21.463 に答える
0

XSLT 2.0 の正規表現機能を使用すると、このような入力を解析する方がはるかに簡単です。

しかし、本当にtr1 行に1 つだけ必要tdで、各垂直バーに境界線が必要な場合は、2 つの名前付きテンプレート (または 1 つのより複雑なテンプレート) を使用して便利に行うことができます。一度に、行を 2 番目の名前付きテンプレートに渡します。テンプレートは、文字シーケンスをtr要素のシーケンスに解析します。疑似コードでは、次のようになります。

template name="emit-rows"
  param name="input"
  choose when $input = ''
     // do nothing
  otherwise 
     <tr>
      call-template name="emit-columns"
        with-param name="s"
                   value="substring-before($input,'&#xA;')
     </tr>
     call-template name="emit-rows"
       with-param name="input"
                  value="substring-after($input,'&#xA;')

template name="emit-columns"
  param name="s"
  choose when $s = ''
     <!--* do nothing *-->
  otherwise
     <td>
       value-of substring-before($s,'|')
     </td>
     call-template name="emit-columns"
        with-param name="s" value="substring-after($s,'|')
于 2012-10-10T00:14:36.597 に答える