2010-11-10 63 views
0

我需要从解析的XML文件中将数据插入到mySQL表中。问题是我有很少的属性,不知道如何将它们插入一行。我尝试了updateString,但它只写入最后一个属性。在一行中插入多个值

这里是例如,从XML文件:

<Tr rn=\"999999999999999\" vr=\"T\" sSpre=\"S\" reg=\"P\" dSpre=\"2010-09-30\" dOdprt=\"2000-01-01\" iban=\"SI56\" eno=\"R\" vir=\"R\" maticnaPps=\"00000000\"><Imetnik davcna=\"0000000\" matSub=\"0000000\" drz=\"705\"><PopolnoIme>xxx</PopolnoIme><KratkoIme>xxx</KratkoIme><Naslov sifTipNaslova=\"01\" sifObcina=\"039\" sifPosta=\"1303\" sifUlica=\"0000\" sifNaselje=\"059\" stHisna=\"027\" sifHsmid=\"11694551\"><Obcina>xxx</Obcina><Posta>xxx</Posta><Ulica>xxx</Ulica><Naselje>xxx</Naselje></Naslov></Imetnik></Tr> 

这是我用于MySQL表写我的java程序划伤。

if (myWorkLine.substring(0,4).equals(Tr)) { 

    uprs.afterLast(); 
    uprs.moveToInsertRow(); 

if (myWorkLine.contains(Tr)) { 
    myWorkLine = myWorkLine.substring(myWorkLine.indexOf(Tr)+4); 
    while (!myWorkLine.substring(0,1).equals("<")) { 
     myTag = myWorkLine.substring(0,myWorkLine.indexOf("=")); 
     myWorkLine = myWorkLine.substring(myWorkLine.indexOf("=")+2); 
     myValue = myWorkLine.substring(0,myWorkLine.indexOf("\"")); 
     myWorkLine = myWorkLine.substring(myWorkLine.indexOf("\"")+2); 
     uprs.updateString("Tr",myTag + " " + myValue); 
     if (myWorkLine.substring(0,myWorkLine.indexOf("\">")).indexOf(">") > 0) 
      break; 
    } 
} 

所以再次,我需要在MySQL表列Tr包含属性rn值,vr值,sSpre价值,...

在此先感谢。

P.S .:请不要问我为什么用这种方法解析XML文件,我必须这样做。 :)

+0

我还是要问,为什么你解析XML的方式。 Java带有内置的库来为你解析XML。通过字符串做这件事很容易出错。 – 2010-11-10 12:01:20

+0

是的,我知道它带有内置的解析器。我的老板命令我这样做。 – Igor 2010-11-10 13:12:18

回答

1

您的代码将重复替换“Tr”列与您的串联的标记+“”+值,所以它只会是最后一个进去。你不想也许想要不同的标签去在不同的列?或者,也许你需要继续连接,并只在最后调用updateString。

您可以发布给定的XML所需的表行吗?这应该有助于确定你想要达到的目标。

例如,如果你只是想添加他们:

StringBuffer tr = new StringBuffer(); 
while (!myWorkLine.substring(0,1).equals("<")) { 
    myTag = myWorkLine.substring(0,myWorkLine.indexOf("=")); 
    myWorkLine = myWorkLine.substring(myWorkLine.indexOf("=")+2); 
    myValue = myWorkLine.substring(0,myWorkLine.indexOf("\"")); 
    myWorkLine = myWorkLine.substring(myWorkLine.indexOf("\"")+2); 
    tr.append(myTag + " " + myValue).append(","); 
    if (myWorkLine.substring(0,myWorkLine.indexOf("\">")).indexOf(">") > 0) 
     break; 
} 
if (tr.length() > 0) { 
    tr.deleteCharAt(tr.length()-1); // get rid of last comma 
} 
uprs.updateString("Tr",tr.toString()); 
+0

是的,这正是我所寻找的。只有我现在无法确定的东西是如何不包含来自XML文件的前一行。就像现在它附加上一行+当前行的值。 – Igor 2010-11-10 13:13:00

+0

那么,当检测到新行时,只是清除StringBuffer(或创建一个新的行)。从你的代码片段中,不清楚这种情况何时会发生。我期望while循环是在一行的开头输入的(使用新创建的StringBuffer) - 从你所说的情况来看,情况并非如此。 – 2010-11-11 08:00:14

+0

是的,你是对的。我发现它然后我需要清除StringBuffer。我是这样做的,它在循环开始时每次都会清除。 感谢您的帮助! – Igor 2010-11-12 14:30:46