0

xslt 1.0 で次のコマンドを実行しようとしています。

 <xsl:element name="{substring-before(concat('dc:',substring-after(name(),'.')),'.')}">
    <xsl:apply-templates/>
 </xsl:element>

行で実行時エラーが発生しますが、前の行で substring-before コマンドを削除すると機能します。どこかで構文エラーが発生したと推測していますが、何が原因かわかりません (xslt を初めて使用するため)。私が間違っていることについての指針はありますか?問題は、針の文字列が見つからない場合に substring-before が返すものであると思いますか?

ありがとう。

4

1 に答える 1

0

$haystack に $needle のインスタンスが含まれていない場合、substring-before($haystack,$needle) は空の文字列を返します。

構文エラーは発生していませんが、ほぼ確実に論理エラーが発生しています。上に向かって頑張りましょう。現在の要素の名前がns:abc、 またはのns:def.ghiいずれかであるとしns:jkl.mno.pqrます。

  1. この式substring-after(name(),'.')は、''、'ghi'、または 'mno.pqr' を返します。

  2. 式は先頭にconcat追加dc:されるため、「dc:」、「dc:ghi」、または「dc:mno.pqr」になります。

  3. 完全な式は、連結結果で「.」を検索します。'.' の前の部分文字列を返します。または空の文字列なので、3 つのテスト ケースで ''、''、および 'pqr' を取得します。

それを推測していて、一致がない場合に文字列全体substring-beforesubstring-after返す場合は、真実がわかります。

于 2013-05-08T19:23:00.333 に答える