Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新xml文件内容的Java代码_Java_Xml - Fatal编程技术网

更新xml文件内容的Java代码

更新xml文件内容的Java代码,java,xml,Java,Xml,我对java和xml都很陌生。我正在努力做到以下几点: 我有一个名为“text.txt”的文本文件,其中包含以下信息: Brad Wood, 4562785341, 413, 3 Laury Mitchell, 7822345321, 413, 2 Jack Foster, 6454532347, 8, 13 <?xml version="1.0" encoding="UTF-8"?> <inventory> <product number="8" price="

我对java和xml都很陌生。我正在努力做到以下几点:

我有一个名为“text.txt”的文本文件,其中包含以下信息:

Brad Wood, 4562785341, 413, 3
Laury Mitchell, 7822345321, 413, 2
Jack Foster, 6454532347, 8, 13
<?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”的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”将包含以下信息:

Brad Wood, 4562785341, 413, 3
Laury Mitchell, 7822345321, 413, 2
Jack Foster, 6454532347, 8, 13
<?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>

对于每个属性值“number”,文件“inv.xml”始终只包含一个“product”元素。此外,文本文件“text.txt”中没有无效编码。我不知道能买多少。库存中的产品数量可能为负数

<?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>
我认为它应该是一个包含不到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);

}
}
import java.io.*;
导入org.w3c.dom.*;
导入javax.xml.parsers.*;
导入javax.xml.transform.*;
导入javax.xml.transform.dom.*;
导入javax.xml.transform.stream.*;
公共类更新{
公共静态void main(字符串[]args)引发IOException{
FileReader文件=新的FileReader(“text.txt”);
BufferedReader br=新的BufferedReader(文件);
字符串行=null;
而((line=br.readLine())!=null){
字符串str[]=line.split(“,”);
System.out.println(str[2]+“,”+str[3]);
}  
file.close();
DocumentBuilderFactory工厂=
DocumentBuilderFactory.newInstance();
DocumentBuilder解析器=
factory.newDocumentBuilder();
Document doc=parser.parse(args[0]);
元素根=doc.getDocumentElement();
NodeList nl=root.getElementsByTagName(“产品”);
对于(int i=0;i
我将从设计解决方案开始。您需要将分配分解为具有指定输入和输出的逻辑自包含步骤-这些步骤将作为单独的方法实现(我相信您已经了解了…)

这是给你的开始:

  • 将文件读入内存。
    输入:文件名
    输出:
    购买的
    实例的
    列表
    
    方法:
    List readPurchases(字符串purchasesFilename)

  • 将投资文件读入内存。
    输入:文件名
    输出:
    产品的
    列表
    实例
    方法:
    List readInventory(字符串inventoryFilename)

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


    你能从这里继续吗?

    这显然是某种作业/家庭作业-你可以使用第三方库,还是只能使用JDK类?只能使用JDK类。我希望我的代码保持目前的状态,但只要找到一种方法,通过添加缺失的内容或更改错误的内容,使其协同工作即可。我知道有许多不同的方法可以获得相同的结果,但我不能使用我还没有学会的编码。你在上面看到的几乎就是我现在正在学习的一个例子。谢谢@CatchwaI我真的是一个初学者,所以它必须保持简单的基本编码。谢谢!你需要说明你认为什么是错误的,为了调试这个问题你尝试了什么,等等。我试着按照下面的方式重做我的代码,但它仍然不起作用,我仍然有点迷路。我不知道如何让我的数组变量工作,我也不知道我是否正确地读取和获取文本文件中的信息,计算和更新xml文件…@catchwa我是这个论坛的新成员,我在哪里发布更新的代码?