2015-07-10 64 views
1

我用java拆就「貿易」元素的不對稱XML拆分不對稱XML爲多個個XML

'<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<BookingRequest>  
    <Id>1234</Id> 
    <App>Pan</App> 
    <Parties> 
    <Party>1</Party> 
    <Party>2</Party> 
    </Parties> 
    <Contract> 
     <Trades> 
     <Trade> 
      <Detail>100</Detail> 
      <Location> 
       <Num>10001</Num> 
      </Location> 
     </Trade>   
     <Trade> 
      <Detail>101</Detail> 
      <Location> 
       <Num>10002</Num> 
      </Location> 
     </Trade> 
     </Trades> 
    </Contract> 
</BookingRequest> 

我的要求是後分割應該有2個文件:

FILE 1:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<BookingRequest>  
    <Id>1234</Id> 
    <App>Pan</App> 
    <Parties> 
    <Party>1</Party> 
    <Party>2</Party> 
    </Parties> 
    <Contract> 
     <Trades> 
     <Trade> 
      <Detail>100</Detail> 
      <Location> 
       <Num>10001</Num> 
      </Location> 
     </Trade> 
     </Trades> 
    </Contract> 
</BookingRequest> 

FILE 2:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<BookingRequest>  
    <Id>1234</Id> 
    <App>Pan</App> 
    <Parties> 
    <Party>1</Party> 
    <Party>2</Party> 
    </Parties> 
    <Contract> 
     <Trades> 
     <Trade> 
      <Detail>101</Detail> 
      <Location> 
       <Num>10002</Num> 
      </Location> 
     </Trade> 
     </Trades> 
    </Contract> 
</BookingRequest> 

有人能幫助我在做這種分裂的(最好使用DOM/XPath和XSLT NOT)

+0

是你嘗試用org.w3c.dom.Document中? –

回答

0
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
Document doc = factory.newDocumentBuilder().parse("booking-request.xml"); 
Element bookingRequest = doc.getDocumentElement(); 
Element contract = (Element)bookingRequest.getElementsByTagName("Contract").item(0); 
Element trades = (Element)contract.getElementsByTagName("Trades").item(0); 

List<Element> tradeList = new ArrayList<Element>(); 
NodeList nodeList = trades.getElementsByTagName("Trade"); 
for(int i=0; i<nodeList.getLength(); i++) 
    tradeList.add((Element)nodeList.item(i)); 

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
int i = 0; 
for(Element trade: tradeList){ 
    // remove all children of <Trades> 
    while(trades.getFirstChild()!=null) 
     trades.removeChild(trades.getFirstChild()); 

    trades.appendChild(doc.createTextNode("\n   ")); 
    trades.appendChild(trade); 
    trades.appendChild(doc.createTextNode("\n  ")); 
    ++i; 
    transformer.transform(new DOMSource(doc), new StreamResult(new File("trade"+i+".xml"))); 
} 
+0

這是完美的。非常感謝 – Sajal

+0

嗨Santhosh。剛剛做到了。謝謝 – Sajal