fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.io.StringReader;
  4. import java.io.StringWriter;
  5.  
  6. import java.util.ArrayList;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Iterator;
  11. import java.util.Random;
  12.  
  13. import javax.xml.parsers.DocumentBuilder;
  14. import javax.xml.parsers.DocumentBuilderFactory;
  15. import javax.xml.parsers.ParserConfigurationException;
  16. import javax.xml.transform.OutputKeys;
  17. import javax.xml.transform.Transformer;
  18. import javax.xml.transform.TransformerException;
  19. import javax.xml.transform.TransformerFactory;
  20. import javax.xml.transform.dom.DOMSource;
  21. import javax.xml.transform.stream.StreamResult;
  22.  
  23. import org.w3c.dom.Document;
  24. import org.w3c.dom.Element;
  25. import org.w3c.dom.NodeList;
  26. import org.xml.sax.InputSource;
  27.  
  28. /* Name of the class has to be "Main" only if the class is public. */
  29. class Ideone
  30. {
  31. public static void main (String[] args) throws java.lang.Exception
  32. {
  33. // your code goes here
  34. final String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"+
  35. "<Order OrderNo=\"1\"><OrderLines><OrderLine cartItemId=\"4\"><Item ItemID=\"76225834\" /></OrderLine>\n"+
  36. "<OrderLine cartItemId=\"1\"><Item ItemID=\"76225814\" /></OrderLine>\n"+
  37. "<OrderLine cartItemId=\"3\"><Item ItemID=\"76225814\" /></OrderLine>\n"+
  38. "<OrderLine cartItemId=\"2\"><Item ItemID=\"76245534\" /></OrderLine></OrderLines></Order>";
  39. Document docInDoc = convertStringToDocument(xmlStr);
  40. Element eleRoot = docInDoc.getDocumentElement();
  41.  
  42. List<String> itemIdList = new ArrayList<String>();
  43. List<Element> resultOrderLineEleList = new ArrayList<Element>();
  44. int count = 1;
  45. NodeList orderLineEleList = eleRoot.getElementsByTagName("OrderLine");
  46. HashMap<Element, Integer> resultOrderLineHashMap = new HashMap<Element, Integer>();
  47.  
  48. for(int i = 0; i< orderLineEleList.getLength(); i++)
  49. {
  50. Element orderLineEle = (Element)orderLineEleList.item(i);
  51. Element itemEle = (Element)orderLineEle.getFirstChild();
  52. String itemId = itemEle.getAttribute("ItemID");
  53. String cartItemId = orderLineEle.getAttribute("cartItemId");
  54. System.out.println("itemId " + itemId);
  55. System.out.println("cartItemId " + cartItemId);
  56. for(int j=i+1; j< orderLineEleList.getLength(); j++)
  57. {
  58. Element orderLineEle2 = (Element)orderLineEleList.item(j);
  59. Element itemEle2 = (Element)orderLineEle2.getFirstChild();
  60. String itemId2 = itemEle2.getAttribute("ItemID");
  61. String cartItemId2 = orderLineEle2.getAttribute("cartItemId");
  62. System.out.println("itemId2 " + itemId2);
  63. System.out.println("cartItemId2 " + cartItemId2);
  64. if(!itemIdList.contains(itemId) && itemId.equals(itemId2)){
  65. count++;
  66. }
  67. }
  68.  
  69. if(!itemIdList.contains(itemId))
  70. {
  71. resultOrderLineHashMap.put(orderLineEle, count);
  72. }
  73. System.out.println("count " + count);
  74. count=1;
  75. itemIdList.add(itemId);
  76. }
  77.  
  78. for(Map.Entry<Element, Integer> entry : resultOrderLineHashMap.entrySet()){
  79.  
  80. Element orderLineEle = entry.getKey();
  81. System.out.println(orderLineEle.getAttribute("cartItemId"));
  82.  
  83. }
  84.  
  85. Document orderDoc = createDocument("Order");
  86. Element orderEle = orderDoc.getDocumentElement();
  87. orderEle.setAttribute("OrderNo", eleRoot.getAttribute("OrderNo"));
  88. Element orderLinesEle = orderDoc.createElement("OrderLines");
  89. orderEle.appendChild(orderLinesEle);
  90.  
  91. List<Element> orderLinesEleList = getElementsByTagName(orderEle, "OrderLine");;
  92. for(Map.Entry<Element, Integer> entry : resultOrderLineHashMap.entrySet()){
  93. orderLinesEleList.add(entry.getKey());
  94. }
  95. for(Element orderLineEle : orderLinesEleList)
  96. {
  97. orderLinesEle.appendChild(orderLineEle);
  98. }
  99.  
  100.  
  101. }
  102.  
  103. private static Document convertStringToDocument(String xmlStr) {
  104. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  105. DocumentBuilder builder;
  106. try
  107. {
  108. builder = factory.newDocumentBuilder();
  109. Document doc = builder.parse( new InputSource( new StringReader( xmlStr ) ) );
  110. return doc;
  111. } catch (Exception e) {
  112. e.printStackTrace();
  113. }
  114. return null;
  115. }
  116.  
  117. public static List getElementsByTagName(Element startElement, String elemName) {
  118. NodeList nodeList = startElement.getElementsByTagName(elemName);
  119. List elemList = new ArrayList();
  120. for (int count = 0; count < nodeList.getLength(); count++) {
  121. elemList.add(nodeList.item(count));
  122. }
  123. return elemList;
  124. }
  125.  
  126. @Override
  127. public int hashCode() {
  128. Random randomGenerator = new Random();
  129. final int prime = 31;
  130. int result = 1;
  131. int randomInt = randomGenerator.nextInt(100);
  132. result = prime * result + randomInt;
  133. return result;
  134. }
  135.  
  136. public static Document createDocument(String docElementTag)
  137. throws ParserConfigurationException {
  138. DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
  139. DocumentBuilder dbdr = fac.newDocumentBuilder();
  140.  
  141. Document doc = dbdr.newDocument();
  142. Element ele = doc.createElement(docElementTag);
  143. doc.appendChild(ele);
  144. return doc;
  145. }
  146.  
  147. }
Runtime error #stdin #stdout #stderr 0.17s 321024KB
stdin
Standard input is empty
stdout
itemId 76225834
cartItemId 4
itemId2 76225814
cartItemId2 1
itemId2 76225814
cartItemId2 3
itemId2 76245534
cartItemId2 2
count 1
itemId 76225814
cartItemId 1
itemId2 76225814
cartItemId2 3
itemId2 76245534
cartItemId2 2
count 2
itemId 76225814
cartItemId 3
itemId2 76245534
cartItemId2 2
count 1
itemId 76245534
cartItemId 2
count 1
2
1
4
stderr
Exception in thread "main" org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
	at com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(ParentNode.java:357)
	at com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(ParentNode.java:288)
	at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:238)
	at Ideone.main(Main.java:97)