私たちのソフトウェア用のユーザー編集可能なXML構成ファイルがあります。このファイルは、Javaアプリケーションでアンマーシャリングされています。設定ファイル内の文字列に新しい変数を追加できるようにしたいと考えています。XSLT 2.0を使用して不明な文字列を置換する
私はこのような構造を持つXMLを持っている:
<root>
<variables>
<key1>foo</key1>
<key2>bar</key1>
...
<keyn>nthbar</keyn>
</variables>
<some-tag>PlainText.${key1}.${keyn}.${key2}.MorePlainText</some-tag>
<other-tag>${key3}</other-tag>
</root>
私は知らキーの値を置き換えるために、このような何かをXSLT 2.0を使用することができることを承知している:
<xsl:variable name="key1" select="root/variables/key1/text()" />
<xsl:variable name="key2" select="root/variables/key1/text()" />
...
<xsl:variable name="keyn" select="root/variables/key1/text()" />
<xsl:template match="text()">
<xsl:value-of select="replace(replace(replace(., '\$\{val1\}', $key1), '\$\{val2\}', $key2), '\$\{valn\}', $keyn)" />
</xsl:template>
トラブルこれはあまり柔軟ではないということです。新しいreplace()は、新しいキーが追加されるたびに既存のreplace()呼び出しをラップする必要があり、対応するxslファイルで新しい変数を宣言する必要があります。
XSLTを使用して、XMLファイルの別の場所にある文字列で$ {keyn}のようなタグを使用すると、値のようなタグを参照するのに滑らかな方法がありますか?
ありがとう!私がしなければならなかった唯一の変更は、実際のルートタグにrootの名前を変更して、タグの内容が出力にコピーされていることを確認することでした - それらを必要としています;-) – circleofconfusion
これは全く同等ではありません元のコードに戻します。オリジナルでは、 '$ {key1} 'を置き換えると' $ {key2}'を含む文字列が生成された場合、そのキーでさらに置き換えが行われます。 @ MartinHonnenの解では、置換えの出力はそれ以上の置換のために考慮されません。 –