次のような大きな xml ドキュメントがあります。
<?xml version="1.0" encoding="UTF-8" ?>
<Data>
<aTable>
<aTableRow Col1="1" Col2="someText"/>
<aTableRow Col1="2" Col2="newText"/>
...
</aTable>
<anotherTable>
<anotherTableRow Col3="someText" Col4="42"/>
<anotherTableRow Col3="myText" Col4="34"/>
...
</anotherTable>
...
</Data>
対応する一連の SQL INSERT ステートメントでドキュメントを変換する必要がありました。何かのようなもの:
INSERT INTO aTable (Col1, Col2) VALUES (1, "someText")
「テーブル」から対応する SQL ステートメントへの変換は既に行っていますが、xslt 出力はドキュメントと同じ順序で生成されます。
たとえば、aTable の前に anotherTable を持つ方法はありますか?
編集
コメントと回答ありがとうございます。それらを読んで、最初の質問がそれほど明確ではないことに気付きました。詳細を追加してみます。
一連の挿入ステートメントで xml データを正しく変換するテンプレートを作成しました。このテンプレートの名前を「insertGeneration」とします。
それから私は次のようなものを書きました:
<xsl:template match="Data/anotherTable">
<xsl:call-template name="insertGeneration"/>
</xsl:template>
<xsl:template match="Data/aTable">
<xsl:call-template name="insertGeneration"/>
</xsl:template>
出力がこの順序で生成されることを期待していました。つまり、 all のINSERT INTO anotherTable
前に allINSERT INTO aTable
です。ただし、結果の順序はソース ドキュメントと同じです。
特定の順序が必要です。そうしないと、SQL スクリプトを実行するときに外部キー制約に違反する可能性があります。
私の xslt プロセッサは Visual Studio 2005 です。まあ、コンパクトな xslt プロセッサではありません ;-)