0

次のような大きな 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 プロセッサではありません ;-)

4

1 に答える 1