java - 处理 xml 应用程序

标签 java xml product

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

例如,有一份订单,其中包含 2 种 Apple 产品、2 种三星产品和 1 种诺基亚产品。

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

我能够读取 order.xml,将每个节点标签存储到一个变量中,因此我有一个变量“价格”、“描述”、“供应商”等。

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

然后为每个供应商导出包含供应商产品的 xml。

非常感谢!

最佳答案

构建 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);
    }                
}

关于java - 处理 xml 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31871258/

相关文章:

reflection - 案例类上的 `productElement(i)`是否使用反射?

java - 根据字符串从 CSV 文件中删除重复行 - JAVA

java - 如何使用java访问我电脑中的另一台电脑mysql数据库(距离50公里)

java - 如何使用 JAX-RS 返回实际的 html 文件

使用异常处理通过 Minidom 进行 Python XML 解析

magento - 为什么 Magento 搜索同时显示可配置产品和简单产品?

java - 尝试构建一维数组时,推理变量具有不兼容的边界

java - Spring、Hibernate 和 .xml 错误

ruby-on-rails - 使用 Nokogiri 根据 Rails 应用程序中的用户输入搜索 XML 文件

magento - 使用自定义选项将产品添加到购物车