我对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);
}
}
答案 0 :(得分:0)
我首先要设计解决方案。你需要将赋值分解为具有指定输入和输出的逻辑自包含步骤 - 这些将作为单独的方法实现(我相信你已经学会了......)
这是ya的首发:
将购买文件读入内存
输入:文件名
输出:List
例Purchase
个
方法:List<Purchase> readPurchases(String purchasesFilename)
将invetory文件读入内存
输入:文件名
输出:List
例Product
个
方法:List<Product> readInventory(String inventoryFilename)
所以现在我们知道我们需要一些内部数据结构。这些方法负责IO操作并解析文本行。
你可以从这里继续吗?