如何将查询结果通常映射到生成的XML?

时间:2011-02-11 10:34:18

标签: java xml resultset

这是查询:

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_title映射到title。现在我有了唯一想到的是创建一个映射,其中键是计数器值,值将是新元素名称,如下所示

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,所以解决方案更通用,它不需要我计算元素的行数,所以我可以正确地映射它们(更不用说如果一个子元素有一个我会遇到的问题额外的孩子,我怎么能映射?:))

2 个答案:

答案 0 :(得分:0)

看看XStream,它可以轻松地进行这种映射。


编辑:好的,所以如果您对输出格式有严格要求,并且您不想要中间对象,那么您可以考虑使用Velocity。您只需要从示例输出中编写一个小模板,并调用velocity在其Context中将ResultSet传递给它。

答案 1 :(得分:0)

您可以使用Castor将查询结果绑定到XML中。请看这个例子:http://www.castor.org/jdo.html#Using-JDO-And-XML