2010-11-10 103 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