2011-02-11 9 views
0

これはクエリです:クエリ結果を生成されたXMLに一般的にどのようにマップできますか?

Select id, title, value, old_title, old_value, new_title, new_value FROM VALUES 

このXML:

<row> 
    <id> 
    <title> 
    <value> 
    <old_state> 
    <title> 
    <value> 
    </old_state> 
    <new_state> 
    <title> 
    <value> 
    </new_state> 
<row> 

私は、既存のXMLのためにそれを行う方法は、私はちょうど使用することができますので、new_state/old_stateを持っていないということです結果、例えば。 String colName = meta.getColumnLabel(i + 1);となり、old_titletitleに割り当てる必要はありません。今、私はこの

boolean columnNameIsStartElement = (columStartNames.get(i) != null)?true=false; 
boolean columnNameIsEndElement = (columEndNames.get(i) != null)?true=false; 
if (columnNameIsStartElement){ 
    writer.writeStartElement(columStartNames.get(i)) 
} else if (columnNameIsEndElement){ 
    writer.writeEndElement(columStartNames.get(i)) 
} 
//continue processing the element as usual 

のように、頭に浮かぶ唯一のことは、キーカウンタ値となり、その値が新しい要素名になりたマップを作ることである持っているしかし、私はそれを好きではありません。私は何とかXSDを使いたいので、ソリューションはより一般的で、要素の行を数える必要がないので、正しくマップすることができます(子要素に追加の子、どのようにマップすることができますか:))

答えて

0

XStreamを見て、それは簡単にそのようなマッピングを行うことができます。


編集:出力形式が厳密で中間オブジェクトが必要ない場合は、Velocityの使用を検討することができます。サンプル出力から小さなテンプレートを作成し、ベクタをコンテキストに渡してResultSetを渡すだけでよいでしょう。

+0

私は結果セットからXMLに書きますが、間にオブジェクトはありません。追加の負荷がかかると思うからです。 – Andrija

+0

また、選択したアイテム「old_value」がある場合、「oldValue」ではなく「old_value」としてXMLに必要です。 – Andrija

関連する問題