java如何解析选定的sql行以将值转换为xml

java如何解析选定的sql行以将值转换为xml,java,sql,select,Java,Sql,Select,我需要获取表数据以生成xml文件并对其签名。XML文件必须类似于: <invoice credate="" invtype="" turnoverdate=""> <customers> <customer custname="" custadr="" custbin=""> </customer>

我需要获取表数据以生成xml文件并对其签名。XML文件必须类似于:

<invoice credate="" invtype="" turnoverdate="">
   <customers>
       <customer custname="" custadr="" custbin="">
       </customer>
   </customers>
   <products curr="" totalExciseAmount="0" totalNdsAmount="0" totalPriceWithTax="200" totalPriceWithoutTax="200" totalTurnoverSize="200">
                <product descr="aa" ndsAmount="0" priceWithTax="100" priceWithoutTax="100" turnoverSize="100"/>
                <product descr="bb" ndsAmount="0" priceWithTax="100" priceWithoutTax="100" turnoverSize="100"/>
   </products>
   <sellers>
       <seller sellname="" selladr="" sellbin="">
       </seller>
   </sellers>
</invoice> 
当我使用此代码设置预创建数组的值时:

int i=0;
while (rows.next()) {
System.out.println("Invoice "+(i+1)+" :");
crdate[i] = rows.getDate("credate");
invtype[i] = rows.getString("invtype");
turnoverdate[i] = rows.getDate("turnoverdate");
custname[i] = rows.getString("custname");
custadr[i] = rows.getString("custadr");
custbin[i] = rows.getString("custbin");
curr[i] = rows.getString("curr");
ndsAmount[i] = rows.getFloat("ndsAmount");
priceWithTax[i] = rows.getFloat("priceWithTax");
priceWithoutTax[i] = rows.getFloat("priceWithoutTax");
turnoverSize[i] = rows.getFloat("turnoverSize");
sellname[i] = rows.getString("sellname");
selladr[i] = rows.getString("selladr");
sellbin[i] = rows.getString("sellbin");
i++;
}
我有如下输出:

发票1:

INVTYPE1 CREDATE1 TRNVRDATE1 CUSTNAME 1 CUSTADR1 CUSTBIN1 SELLNAME 1 SELLADR1 SELLBIN1 PRODCURR1 PRODESCR1 prodndsam1 PRODUPRWTAX1 PRODUPRWOTAX 1 PRODUTRNVRSIZE1

发票2:

INVTYPE1凭证1 TRNVRDATE1客户名称1客户名称1销售名称1销售名称1产品描述2产品名称2产品名称2产品名称2产品名称2产品名称2产品名称2产品名称2产品名称2产品认证2

发票3:

INVTYPE2 Credate 2 TRNVRDATE 2 CUSTNAME2 CUSTADR2 CUSTBIN2 SELLNAME2 SELLADR2 SELLBIN2 PRODCURR2 proddescr1 prodndsam1 ProdRwtax1 ProdRwoTax1 ProdRvSize1

发票4:

INVTYPE 3凭证3 TRNVRDATE 3 CUSTNAME 3 CUSTADR3 CUSTBIN3 SELLNAME 3 SELLADR3 SELLBIN3 PRODUCCURR3 PRODUDESCR1 PRODUNDSAM1 PRODUPRWTAX1 PRODUPRWOTAX 1 PRODUTRNVRSIZE1

但是只有3张发票,因为第一张发票有2个产品位置。所以它必须是这样的:

<invoice credate="" invtype="" turnoverdate="">
   <customers>
       <customer custname="" custadr="" custbin="">
       </customer>
   </customers>
   <products curr="" totalExciseAmount="0" totalNdsAmount="0" totalPriceWithTax="200" totalPriceWithoutTax="200" totalTurnoverSize="200">
                <product descr="aa" ndsAmount="0" priceWithTax="100" priceWithoutTax="100" turnoverSize="100"/>
                <product descr="bb" ndsAmount="0" priceWithTax="100" priceWithoutTax="100" turnoverSize="100"/>
   </products>
   <sellers>
       <seller sellname="" selladr="" sellbin="">
       </seller>
   </sellers>
</invoice> 
发票1:

INVTYPE1 Credate 1 TRNVrDate 1 CUSTNAME 1 CUSTADR1 CUSTBIN1 SELLNAME 1 SELLADR1 SELLBIN1 PRODCUR1 PRODESCR2 PRODNDSCR2 prodndsam1 PRODNDSCR2 PRODNDRWTAX1 PRODNPRWOTAX 1 PRODNPRWOTAX 2 PRODNDRWOTAX 2 PRODNTRNVRSIZE1 PRODNTRNVRSIZE2

发票2:

INVTYPE2 Credate 2 TRNVRDATE 2 CUSTNAME2 CUSTADR2 CUSTBIN2 SELLNAME2 SELLADR2 SELLBIN2 PRODCURR2 proddescr1 prodndsam1 ProdRwtax1 ProdRwoTax1 ProdRvSize1

发票3:

INVTYPE 3凭证3 TRNVRDATE 3 CUSTNAME 3 CUSTADR3 CUSTBIN3 SELLNAME 3 SELLADR3 SELLBIN3 PRODUCCURR3 PRODUDESCR1 PRODUNDSAM1 PRODUPRWTAX1 PRODUPRWOTAX 1 PRODUTRNVRSIZE1

你能帮我解决这个问题吗。如何为一张发票获取多个产品位置?如果1张发票上有1个产品位置,则正常创建xml文件。但是,如果一张发票有两个或多个产品位置,则由于两个或多个位置,将创建xml文件,就像有两张或多张发票一样。请帮帮我


另外,我不能使用“db data to xml”转换LIB,因为我必须向xml中添加一些不是从db中获取的信息。

修改您的查询,将
o.id
包含在select中

 select o.id, o.invtype, o.curr, o.crdate, o.trnvrdate, o.custname, o.custadr, 
 o.custbin, o.sellname, o.selladr, o.sellbin, d.descr, d.ndsamount, d.prWTax, 
 d.prWOTax, d.trnvrsize from inv o, inv_dtl d 
 where o.dep_id = d.dep_id and o.id= d.id
然后在保留产品的同时,使用
o.id
修改循环以消除发票中的重复数据

long tempId = 0;
while (rows.next()) {
  if (tempId == rows.getLong("id")) {
    // add productN
  } else {
    // add invoice + product1
    tempId = rows.getLong("id");
  }
}

您还可以发布您的SQL查询吗?@A.Agarwal SQL查询:
选择o.invtype、o.curr、o.crdate、o.trnvrdate、o.custname、o.custard、o.custbin、o.sellname、o.selladr、o.sellbin、d.descr、d.ndsamount、d.prWTax、d.prWOTax、d.trnvrsize from inv o,inv_dtl d其中o.dep_id=d.dep_id和o.id=d.id
@bakash_erni如果它解决了您的问题,您可以接受答案-