Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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
Java 处理xml应用程序_Java_Xml_Product - Fatal编程技术网

Java 处理xml应用程序

Java 处理xml应用程序,java,xml,product,Java,Xml,Product,我必须创建一个处理xml文件的java应用程序。确切地说,应用程序读取具有多个供应商的订单xml文件 例如,有一个订单,其中2个产品来自苹果,2个产品来自三星,1个产品来自诺基亚 应用程序必须为每个供应商创建一个xml文件。我应该有apple.xml和苹果的产品(从该order.xml),samsung.xml和三星的产品,nokia.xml和诺基亚的widh产品 我能够读取order.xml,将每个nodetag存储到一个变量中,因此我有一个变量‘price’、‘description’、‘s

我必须创建一个处理xml文件的java应用程序。确切地说,应用程序读取具有多个供应商的订单xml文件

例如,有一个订单,其中2个产品来自苹果,2个产品来自三星,1个产品来自诺基亚

应用程序必须为每个供应商创建一个xml文件。我应该有apple.xml和苹果的产品(从该order.xml),samsung.xml和三星的产品,nokia.xml和诺基亚的widh产品

我能够读取order.xml,将每个nodetag存储到一个变量中,因此我有一个变量‘price’、‘description’、‘supplier’等

但我不知道如何为每个供应商创建新的xml,以及如何存储唯一的供应商名称。因为如果我有3个苹果的产品,它将需要“苹果”3次

然后为每个供应商导出带有供应商产品的xml


多谢各位

您是否尝试使用XML解析器?它可以帮助您轻松地读写XML文件。以下是两个例子:

  • DOM解析器:
  • SAX解析器:

您是否尝试使用XML解析器?它可以帮助您轻松地读写XML文件。以下是两个例子:

  • DOM解析器:
  • SAX解析器:

构造xml有几种方法。我这里只有两个例子

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;


public class CreateXMLClass {

    public CreateXMLClass() {
        String xml1 = getXML1(new File("sample.xml"));
        System.out.println(xml1);

        System.out.println("");
        System.out.println("");

        String xml2 = getXML2();
        System.out.println(xml2);
    }

    // creates xml file and returns the contents
    private String getXML1(File f) {
        String data="";
        TransformerFactory transformerFactory;
        Transformer transformer;
        DOMSource source;
        StreamResult result;

        try{
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

            //root elements
            Document doc = docBuilder.newDocument();
            Element soapEnvelope = doc.createElement("soapenv:Envelope");
            soapEnvelope.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
            soapEnvelope.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
            soapEnvelope.setAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
            soapEnvelope.setAttribute("xmlns:ns0", "https://ws.mycompany.com/");
            doc.appendChild(soapEnvelope);



            //elements
            Element header = doc.createElement("soapenv:Header");
            soapEnvelope.appendChild(header);

            Element soapBody = doc.createElement("soapenv:Body");
            soapEnvelope.appendChild(soapBody);

            Element ns0 = doc.createElement("ns0:SampleApplication");
            ns0.setAttribute("xmlns:ns0", "http://ws.mycompany.com");
            soapBody.appendChild(ns0);


            Element element01 = doc.createElement("Sample1");
            element01.appendChild(doc.createTextNode("value1"));
            ns0.appendChild(element01);

            Element element02 = doc.createElement("Sample2");
            element02.appendChild(doc.createTextNode("value2"));
            ns0.appendChild(element02);

            Element element03 = doc.createElement("Sample3");
            element03.appendChild(doc.createTextNode("value3"));
            ns0.appendChild(element03);



            //write the content into xml file
            transformerFactory = TransformerFactory.newInstance();
            transformer = transformerFactory.newTransformer();
            source = new DOMSource(doc);
            result =  new StreamResult(f);
            transformer.transform(source, result);


            FileReader fr;
            fr = new FileReader(f);
            int d;

            d = fr.read();

            while (d != -1) {
                data = data +(char)d;
                d = fr.read();
            }
            fr.close();


        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch(ParserConfigurationException pce){
            pce.printStackTrace();
        } catch(TransformerException tfe){
            tfe.printStackTrace();
        }

        return data;
    }                

    // creates xml and returns the content
    private String getXML2() {
        String data="";
        TransformerFactory transformerFactory;
        Transformer transformer;
        DOMSource source;
        StreamResult result;
        StringWriter writer;

        try{
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

            //root elements
            Document doc = docBuilder.newDocument();
            Element soapEnvelope = doc.createElement("soapenv:Envelope");
            soapEnvelope.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
            soapEnvelope.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
            soapEnvelope.setAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
            soapEnvelope.setAttribute("xmlns:ns0", "https://ws.mycompany.com/");
            doc.appendChild(soapEnvelope);



            //elements
            Element header = doc.createElement("soapenv:Header");
            soapEnvelope.appendChild(header);

            Element soapBody = doc.createElement("soapenv:Body");
            soapEnvelope.appendChild(soapBody);

            Element ns0 = doc.createElement("ns0:SampleApplication");
            ns0.setAttribute("xmlns:ns0", "http://ws.mycompany.com");
            soapBody.appendChild(ns0);


            Element element01 = doc.createElement("Sample1");
            element01.appendChild(doc.createTextNode("value1"));
            ns0.appendChild(element01);

            Element element02 = doc.createElement("Sample2");
            element02.appendChild(doc.createTextNode("value2"));
            ns0.appendChild(element02);

            Element element03 = doc.createElement("Sample3");
            element03.appendChild(doc.createTextNode("value3"));
            ns0.appendChild(element03);



            writer = new StringWriter();
            result = new StreamResult(writer);

            transformerFactory = TransformerFactory.newInstance();
            transformer = transformerFactory.newTransformer();
            source = new DOMSource(doc);
            transformer.transform(source, result);

            data =  writer.getBuffer().toString();

        } catch(ParserConfigurationException pce){
            pce.printStackTrace();
        } catch(TransformerException tfe){
            tfe.printStackTrace();
        }

        return data;
    }

    public static void main(String args[]) {
        new CreateXMLClass();
        System.exit(0);
    }                
}

有几种方法可以构造xml。我这里只有两个例子

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;


public class CreateXMLClass {

    public CreateXMLClass() {
        String xml1 = getXML1(new File("sample.xml"));
        System.out.println(xml1);

        System.out.println("");
        System.out.println("");

        String xml2 = getXML2();
        System.out.println(xml2);
    }

    // creates xml file and returns the contents
    private String getXML1(File f) {
        String data="";
        TransformerFactory transformerFactory;
        Transformer transformer;
        DOMSource source;
        StreamResult result;

        try{
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

            //root elements
            Document doc = docBuilder.newDocument();
            Element soapEnvelope = doc.createElement("soapenv:Envelope");
            soapEnvelope.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
            soapEnvelope.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
            soapEnvelope.setAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
            soapEnvelope.setAttribute("xmlns:ns0", "https://ws.mycompany.com/");
            doc.appendChild(soapEnvelope);



            //elements
            Element header = doc.createElement("soapenv:Header");
            soapEnvelope.appendChild(header);

            Element soapBody = doc.createElement("soapenv:Body");
            soapEnvelope.appendChild(soapBody);

            Element ns0 = doc.createElement("ns0:SampleApplication");
            ns0.setAttribute("xmlns:ns0", "http://ws.mycompany.com");
            soapBody.appendChild(ns0);


            Element element01 = doc.createElement("Sample1");
            element01.appendChild(doc.createTextNode("value1"));
            ns0.appendChild(element01);

            Element element02 = doc.createElement("Sample2");
            element02.appendChild(doc.createTextNode("value2"));
            ns0.appendChild(element02);

            Element element03 = doc.createElement("Sample3");
            element03.appendChild(doc.createTextNode("value3"));
            ns0.appendChild(element03);



            //write the content into xml file
            transformerFactory = TransformerFactory.newInstance();
            transformer = transformerFactory.newTransformer();
            source = new DOMSource(doc);
            result =  new StreamResult(f);
            transformer.transform(source, result);


            FileReader fr;
            fr = new FileReader(f);
            int d;

            d = fr.read();

            while (d != -1) {
                data = data +(char)d;
                d = fr.read();
            }
            fr.close();


        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch(ParserConfigurationException pce){
            pce.printStackTrace();
        } catch(TransformerException tfe){
            tfe.printStackTrace();
        }

        return data;
    }                

    // creates xml and returns the content
    private String getXML2() {
        String data="";
        TransformerFactory transformerFactory;
        Transformer transformer;
        DOMSource source;
        StreamResult result;
        StringWriter writer;

        try{
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

            //root elements
            Document doc = docBuilder.newDocument();
            Element soapEnvelope = doc.createElement("soapenv:Envelope");
            soapEnvelope.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
            soapEnvelope.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
            soapEnvelope.setAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
            soapEnvelope.setAttribute("xmlns:ns0", "https://ws.mycompany.com/");
            doc.appendChild(soapEnvelope);



            //elements
            Element header = doc.createElement("soapenv:Header");
            soapEnvelope.appendChild(header);

            Element soapBody = doc.createElement("soapenv:Body");
            soapEnvelope.appendChild(soapBody);

            Element ns0 = doc.createElement("ns0:SampleApplication");
            ns0.setAttribute("xmlns:ns0", "http://ws.mycompany.com");
            soapBody.appendChild(ns0);


            Element element01 = doc.createElement("Sample1");
            element01.appendChild(doc.createTextNode("value1"));
            ns0.appendChild(element01);

            Element element02 = doc.createElement("Sample2");
            element02.appendChild(doc.createTextNode("value2"));
            ns0.appendChild(element02);

            Element element03 = doc.createElement("Sample3");
            element03.appendChild(doc.createTextNode("value3"));
            ns0.appendChild(element03);



            writer = new StringWriter();
            result = new StreamResult(writer);

            transformerFactory = TransformerFactory.newInstance();
            transformer = transformerFactory.newTransformer();
            source = new DOMSource(doc);
            transformer.transform(source, result);

            data =  writer.getBuffer().toString();

        } catch(ParserConfigurationException pce){
            pce.printStackTrace();
        } catch(TransformerException tfe){
            tfe.printStackTrace();
        }

        return data;
    }

    public static void main(String args[]) {
        new CreateXMLClass();
        System.exit(0);
    }                
}

是的,我使用DOM解析器。我能够读取xml文件。但是我不知道如何从原始xml为每个供应商编写xml文件。下面的示例是:,尝试创建一个文档,在创建文档后,您可以用之前读取的第一个xml的内容填充它,包括您需要的标记。最后,您可以将内容写入文件。只需重复此过程,即可创建所需数量的文件:)非常有用。谢谢是的,我使用DOM解析器。我能够读取xml文件。但是我不知道如何从原始xml为每个供应商编写xml文件。下面的示例是:,尝试创建一个文档,在创建文档后,您可以用之前读取的第一个xml的内容填充它,包括您需要的标记。最后,您可以将内容写入文件。只需重复此过程,即可创建所需数量的文件:)非常有用。谢谢