用于更新xml文件内容的Java代码

时间:2017-05-04 00:44:40

标签: java xml

我对java和xml都很新。我正在尝试执行以下操作:

我有一个名为“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代码需要更新xml文件中包含的库存,具体取决于从“text.txt”文件中购买的内容。我将我的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”将始终只包含每个属性值“number”的一个“product”元素。此外,文本文件“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);

}
}

1 个答案:

答案 0 :(得分:0)

我首先要设计解决方案。你需要将赋值分解为具有指定输入和输出的逻辑自包含步骤 - 这些将作为单独的方法实现(我相信你已经学会了......)

这是ya的首发:

  1. 将购买文件读入内存 输入:文件名
    输出:ListPurchase个 方法:List<Purchase> readPurchases(String purchasesFilename)

  2. 将invetory文件读入内存 输入:文件名
    输出:ListProduct个 方法:List<Product> readInventory(String inventoryFilename)

  3. 所以现在我们知道我们需要一些内部数据结构。这些方法负责IO操作并解析文本行。

    你可以从这里继续吗?