2017-05-04 19 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ファイルに含まれる目録を更新する必要があります。私は "InvUpdate.java"というファイルに自分のjavaコードを置き、購入した製品の数量を引くために "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

ソリューションの設計から始めます。あなたは、指定された入力と出力を持つ論理的な自己完結型のステップへの割り当てを分解する必要があります - これらは個別のメソッドとして実装されます(私はあなたが学んだと確信しています...)

ここでは、

  1. 読み取りファイルを内部メモリに読み込みます。
    入力:ファイル名
    出力:List
    インスタンスPurchaseの方法:List<Purchase> readPurchases(String purchasesFilename)

  2. 内部メモリにinvetoryファイルを読み込みます。
    入力:ファイル名
    出力:ListProductのインスタンス
    方法:List<Product> readInventory(String inventoryFilename)

は、だから今我々はいくつかの内部データ構造を必要と知っています。これらのメソッドは、IO操作とテキスト行の解析を処理します。

ここから続けることができますか?

+0

私のコードを次のようにやり直そうとしましたが、まだ動作していません。配列変数を取得する方法がわかりません。また、テキストファイルから情報を読み込んで計算し、XMLファイルを計算して更新するにはどうすればよいか分かりません。 – Esperanza

+0

@catchwa私は新しいですこのフォーラムはどこで更新コードを投稿しますか? – Esperanza

関連する問題