2017-05-04 24 views
0

我對java和xml都很新。我試圖做到以下幾點:用於更新xml文件內容的Java代碼

我有一個名爲「的text.txt」包含以下信息的文本文件:

Brad Wood, 4562785341, 413, 3 
Laury Mitchell, 7822345321, 413, 2 
Jack Foster, 6454532347, 8, 13 

在每一行,我有:客戶的姓名,信用卡卡號,產品編號和購買數量。

我還有一個名爲「inv.xml」的xml文件,其中包含庫存。

<?xml version="1.0" encoding="UTF-8"?> 
<inventory> 
<product number="8" price="382.00" quantity= "24" /> 
<product number="46" price="24.00" quantity= "85" /> 
<product number="413" price="12.00" quantity= "230" /> 
</inventory> 

java代碼需要根據從文件「text.txt」購買的內容更新xml文件中包含的庫存。我將我的java代碼放在名爲「InvUpdate.java」的文件中,並且命令「java invUpdate text.txt inv.xml」需要修改文件「inv.xml」以減去購買的產品數量。在這個例子中,程序文件「inv.xml」將包含以下信息的執行以下操作:

<?xml version="1.0" encoding="UTF-8"?> 
<inventory> 
<product number="8" price="382.00" quantity= "11" /> 
<product number="46" price="24.00" quantity= "85" /> 
<product number="413" price="12.00" quantity= "225" /> 
</inventory> 

文件「inv.xml」永遠包含每個只有一個「產品」元素的屬性值「數」。在文本文件「text.txt」中也沒有無效的編碼。我不知道可以有多少購買。庫存中可能有負數量的產品。

我認爲它應該是一個很短的程序,包含少於50行,我不需要使用try-catch。正如我所說的,我是一名初學者,我正在努力學習,所以請使用基本的Java編碼保持您的答案非常簡單。沒有高級編碼請。

這是我到目前爲止所做的。我想保持我的代碼與現在一樣,但只是找到一種方法,通過添加缺少的內容或更改錯誤來使它們一起工作。我知道有很多不同的方法可以獲得相同的結果,但我不想使用我還沒學過的編碼。正如我所說我是初學者,我正在努力理解我在做什麼。你在下面看到的幾乎是我所在的一個例子。感謝您的幫助。

import java.io.*; 
import org.w3c.dom.*; 
import javax.xml.parsers.*; 
import javax.xml.transform.*; 
import javax.xml.transform.dom.*; 
import javax.xml.transform.stream.*; 

public class InvUpdate { 

public static void main(String[] args) throws IOException { 

    FileReader file = new FileReader("text.txt"); 
    BufferedReader br = new BufferedReader(file); 
    String line = null; 

    while ((line = br.readLine()) != null) {  
     String str[] =line.split(",");  
     System.out.println(str[2] +","+str[3]); 
    } 
    file.close(); 

    DocumentBuilderFactory factory = 
    DocumentBuilderFactory.newInstance(); 
    DocumentBuilder parser = 
    factory.newDocumentBuilder(); 
    Document doc = parser.parse(args[0]); 
    Element root = doc.getDocumentElement(); 
    NodeList nl = root.getElementsByTagName("product"); 


    for (int i = 0; i < nl.getLength(); ++i) { 
     Element product = (Element) nl.item(i); 

if (product.getAttribute("number").equals(str[2])){ 
} 
product.setAttribute("quantity",Integer.toString(Integer.parseInt(product.getAttribute("quantity")) - qty)); 


    } 

TransformerFactory tfact = TransformerFactory.newInstance(); 
Transformer transformer = tfact.newTransformer(); 
transformer.setOutputProperty("encoding", "UTF-8"); 
DOMSource source = new DOMSource(doc); 
FileWriter fw = new FileWriter("inv.xml"); 
StreamResult result = new StreamResult(fw);  
transformer.transform(source, result); 

} 
} 
+0

這顯然是某種作業/作業 - 您允許使用第三方庫,還是隻能使用JDK類? – Catchwa

+0

只有JDK類。我想保持我的代碼與現在一樣,但只是找到一種方法,通過添加缺少的內容或更改錯誤來使它們一起工作。我知道有很多不同的方法可以獲得相同的結果,但是我不能使用我還沒學過的編碼。你上面看到的幾乎是我現在正在學習的一個例子。謝謝@Catchwa – Esperanza

+0

我真的是一個初學者,所以它必須保持簡單的基本編碼。謝謝 ! – Esperanza

回答

0

我會從設計解決方案開始。你需要用指定的輸入和輸出將這些任務分解爲邏輯自包含的步驟 - 這些將作爲單獨的方法實現(我相信你已經知道了...)

這裏是ya的入門:

  1. 將購買文件讀入內部存儲器。
    輸入:文件名
    輸出:ListPurchase實例
    方法:List<Purchase> readPurchases(String purchasesFilename)

  2. 讀invetory文件到內部存儲器中。
    輸入:文件名
    輸出:ListProduct實例
    方法:List<Product> readInventory(String inventoryFilename)

所以,現在我們知道我們需要一些內部數據結構。這些方法負責IO操作並解析文本行。

你能繼續嗎?

+0

我試圖重做我的代碼,但它仍然無法正常工作,我仍然有些迷茫。我不知道如何讓我的數組變量工作,也不知道我是否正確地閱讀並從文本文件中獲取信息,計算和更新xml文件... – Esperanza

+0

@catchwa我是新的這個論壇我在哪裏發佈我的更新代碼? – Esperanza