2015-08-07 3 views
1

Мне нужно создать приложение java, обрабатывающее файлы xml. Именно, приложение читает XML-файлы заказов с несколькими поставщиками.Обработка xml-приложения

Например, есть заказ с 2 продуктами от Apple, 2 от Samsung и 1 от Nokia.

Приложение должно создать 1 xml-файл для каждого поставщика. Я должен иметь apple.xml с продуктами из apple (из этого order.xml), samsung.xml с продуктами из samsung и nokia.xml продуктов widh от nokia.

Я был в состоянии прочитать order.xml, чтобы хранить каждый nodetag в переменную, поэтому у меня есть переменная «цена», «описание», «поставщик» и т.д.

Но я не знать, как создать новый xml для каждого поставщика и как сохранить уникальное имя поставщика. Потому что, если у меня есть 3 продукта от Apple, это займет «Яблоко» 3 раза.

А затем для каждого поставщика для экспорта xml с продуктами поставщика.

спасибо!

ответ

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); 
    }     
} 
0

Вы пытались использовать XML-парсер? Это может помочь вам легко и быстро читать и писать XML-файлы. Вот два примера:

+0

Да, я использую парсер DOM. Я смог прочитать xml-файл. Но я не знаю, как написать xml-файл для каждого поставщика из исходного xml. – codi05ro

+0

Следуя примеру отсюда: http://www.journaldev.com/1112/how-to-write-xml-file-in-java-dom-parser, попытайтесь создать документ, после него вы можете его заполнить содержимое первого XML, ранее прочитанного, включая только те теги, которые вам нужны. Наконец, вы можете записать содержимое в файл. Просто повторите процесс, чтобы создать столько файлов, сколько хотите :) – Luisetelo

+0

Очень полезно. Благодаря! – codi05ro