Advertisement
drogba1192

Untitled

May 6th, 2015
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.75 KB | None | 0 0
  1. package xml;
  2.  
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.sql.Date;
  6. import java.util.ArrayList;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10.  
  11. import javax.xml.parsers.DocumentBuilder;
  12. import javax.xml.parsers.DocumentBuilderFactory;
  13. import javax.xml.parsers.ParserConfigurationException;
  14.  
  15. import org.w3c.dom.DOMImplementationList;
  16. import org.w3c.dom.Document;
  17. import org.w3c.dom.Element;
  18. import org.w3c.dom.Node;
  19. import org.w3c.dom.NodeList;
  20. import org.w3c.dom.bootstrap.DOMImplementationRegistry;
  21. import org.w3c.dom.ls.DOMImplementationLS;
  22. import org.w3c.dom.ls.LSOutput;
  23. import org.w3c.dom.ls.LSSerializer;
  24. import org.xml.sax.ErrorHandler;
  25. import org.xml.sax.SAXException;
  26. import org.xml.sax.SAXParseException;
  27.  
  28. import dao.Könyv;
  29.  
  30. /**
  31.  * Állitsunk össze egy másik xml dokumentumokat, <műfajok> <műfaj név=""> <könyv
  32.  * azon = <cim </könyv> <könyv azon = <cim </könyv> </mufaj
  33.  *
  34.  * @author hallgato
  35.  *
  36.  */
  37. public class DOMMain {
  38.  
  39.     public static void main(String[] args) {
  40.         /*
  41.          * try { DOMImplementationRegistry dir; dir =
  42.          * DOMImplementationRegistry.newInstance(); DOMImplementationList dil =
  43.          * dir.getDOMImplementationList("XML 3.0 LS");//standerd módon tudom az
  44.          * xml dokumentumot betölteni és elmenteni for (int i = 0; i <
  45.          * dil.getLength(); i++) { System.out.println(dil.item(i)); } } catch
  46.          * (ClassNotFoundException | InstantiationException |
  47.          * IllegalAccessException | ClassCastException e1) { // TODO
  48.          * Auto-generated catch block e1.printStackTrace(); }
  49.          */
  50.         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  51.         try {
  52.             dbf.setFeature(
  53.                     "http://apache.org/xml/features/dom/include-ignorable-whitespace",
  54.                     false);
  55.             dbf.setValidating(true);// validátorf
  56.             DocumentBuilder builder = dbf.newDocumentBuilder();
  57.             builder.setErrorHandler(new ErrorHandler() {
  58.  
  59.                 @Override
  60.                 public void warning(SAXParseException exception)
  61.                         throws SAXException {
  62.                     System.out.println("WARNING " + exception.getMessage());
  63.                 }
  64.  
  65.                 @Override
  66.                 public void fatalError(SAXParseException exception)
  67.                         throws SAXException {
  68.                     System.out.println("FATALERROR " + exception.getMessage());
  69.                 }
  70.  
  71.                 @Override
  72.                 public void error(SAXParseException exception)
  73.                         throws SAXException {
  74.                     System.out.println("ERROR " + exception.getMessage());
  75.                     throw new SAXException(exception);// akkor már nem épül fel
  76.                                                         // a listám, én döntöm
  77.                                                         // el h átengedem vagy
  78.                                                         // sem
  79.                 }
  80.             });
  81.             Document doc = builder.parse("book.xml");// import
  82.                                                         // org.w3c.dom.Document;
  83.             // bejár(doc, 0);
  84.             NodeList books = doc.getElementsByTagName("book");// dokumentumtipusú
  85.                                                                 // csomópontra,
  86.                                                                 // adott elemben
  87.                                                                 // levő
  88.                                                                 // részfában
  89.                                                                 // levő elemek
  90.                                                                 // listáját
  91.             List<Könyv> katalógus = new ArrayList<Könyv>();
  92.             for (int i = 0; i < books.getLength(); i++) {
  93.                 Element bookElement = (Element) books.item(i);
  94.                 String azon = bookElement.getAttribute("id");
  95.                 Könyv k = new Könyv(azon);
  96.                 k.setSzerző(bookElement.getElementsByTagName("author").item(0)
  97.                         .getTextContent());
  98.                 k.setCim(bookElement.getElementsByTagName("title").item(0)
  99.                         .getTextContent());
  100.                 k.setMűfaja(bookElement.getElementsByTagName("genre").item(0)
  101.                         .getTextContent());
  102.                 k.setÁr(Double
  103.                         .valueOf(bookElement.getElementsByTagName("price")
  104.                                 .item(0).getTextContent()));
  105.                 k.setKiadásiDátum(Date.valueOf(bookElement
  106.                         .getElementsByTagName("publish_date").item(0)
  107.                         .getTextContent()));
  108.                 k.setLeirás(bookElement.getElementsByTagName("description")
  109.                         .item(0).getTextContent());
  110.                 katalógus.add(k);
  111.             }
  112.             Map<String, List<Könyv>> m = new HashMap<String, List<Könyv>>();
  113.             for (Könyv könyv : katalógus) {
  114.                 if (m.containsKey(könyv.getMűfaja())) {
  115.                     m.get(könyv.getMűfaja()).add(könyv);
  116.                 } else {
  117.                     List<Könyv> l = new ArrayList<Könyv>();
  118.                     l.add(könyv);
  119.                     m.put(könyv.getMűfaja(), l);
  120.                 }
  121.             }
  122.             System.out.println(m);
  123.             Document újDok = builder.newDocument();
  124.             Element műfajokElem = újDok.createElement("műfajok");
  125.             újDok.appendChild(műfajokElem);
  126.             for (String műfaj : m.keySet()) {
  127.                 Element műfajElem = újDok.createElement("műfaj");
  128.                 műfajElem.setAttribute("név", műfaj);
  129.                 műfajokElem.appendChild(műfajElem);
  130.                 for (Könyv könyv : m.get(műfaj)) {
  131.                     Element könyvElem = újDok.createElement("könyv");
  132.                     könyvElem.setAttribute("azon", könyv.getAzon());
  133.                     műfajElem.appendChild(könyvElem);
  134.                     könyvElem.appendChild(újDok.createElement("cim"))
  135.                             .appendChild(újDok.createTextNode(könyv.getCim()));
  136.                 }
  137.             }
  138.             DOMImplementationLS dils = (DOMImplementationLS) builder.getDOMImplementation();
  139.             LSSerializer lsser = dils.createLSSerializer();
  140.             lsser.getDomConfig().setParameter("format-pretty-print", true);
  141.             LSOutput lsout = dils.createLSOutput();
  142.             lsout.setCharacterStream(new FileWriter("műfajok.xml"));
  143.             lsser.write(újDok, lsout);
  144.         } catch (ParserConfigurationException e) {
  145.             // TODO Auto-generated catch block
  146.             e.printStackTrace();
  147.         } catch (SAXException e) {
  148.             // TODO Auto-generated catch block
  149.             e.printStackTrace();
  150.         } catch (IOException e) {
  151.             // TODO Auto-generated catch block
  152.             e.printStackTrace();
  153.         }
  154.     }
  155.  
  156.     private static void bejár(Node n, int mélység) {
  157.         for (int i = 0; i < mélység; i++) {
  158.             System.out.print(" ");
  159.         }
  160.         System.out.println(n);
  161.         NodeList nl = n.getChildNodes();
  162.         for (int i = 0; i < nl.getLength(); i++) {
  163.             bejár(nl.item(i), mélység + 1);
  164.         }
  165.     }
  166.  
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement