这是查询:
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,所以解决方案更通用,它不需要我计算元素的行数,所以我可以正确地映射它们(更不用说如果一个子元素有一个我会遇到的问题额外的孩子,我怎么能映射?:))
答案 0 :(得分:0)
看看XStream,它可以轻松地进行这种映射。
编辑:好的,所以如果您对输出格式有严格要求,并且您不想要中间对象,那么您可以考虑使用Velocity。您只需要从示例输出中编写一个小模板,并调用velocity在其Context中将ResultSet传递给它。
答案 1 :(得分:0)
您可以使用Castor将查询结果绑定到XML中。请看这个例子:http://www.castor.org/jdo.html#Using-JDO-And-XML