Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package xml;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.sql.Date;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import org.w3c.dom.DOMImplementationList;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- import org.w3c.dom.bootstrap.DOMImplementationRegistry;
- import org.w3c.dom.ls.DOMImplementationLS;
- import org.w3c.dom.ls.LSOutput;
- import org.w3c.dom.ls.LSSerializer;
- import org.xml.sax.ErrorHandler;
- import org.xml.sax.SAXException;
- import org.xml.sax.SAXParseException;
- import dao.Könyv;
- /**
- * Állitsunk össze egy másik xml dokumentumokat, <műfajok> <műfaj név=""> <könyv
- * azon = <cim </könyv> <könyv azon = <cim </könyv> </mufaj
- *
- * @author hallgato
- *
- */
- public class DOMMain {
- public static void main(String[] args) {
- /*
- * try { DOMImplementationRegistry dir; dir =
- * DOMImplementationRegistry.newInstance(); DOMImplementationList dil =
- * dir.getDOMImplementationList("XML 3.0 LS");//standerd módon tudom az
- * xml dokumentumot betölteni és elmenteni for (int i = 0; i <
- * dil.getLength(); i++) { System.out.println(dil.item(i)); } } catch
- * (ClassNotFoundException | InstantiationException |
- * IllegalAccessException | ClassCastException e1) { // TODO
- * Auto-generated catch block e1.printStackTrace(); }
- */
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- try {
- dbf.setFeature(
- "http://apache.org/xml/features/dom/include-ignorable-whitespace",
- false);
- dbf.setValidating(true);// validátorf
- DocumentBuilder builder = dbf.newDocumentBuilder();
- builder.setErrorHandler(new ErrorHandler() {
- @Override
- public void warning(SAXParseException exception)
- throws SAXException {
- System.out.println("WARNING " + exception.getMessage());
- }
- @Override
- public void fatalError(SAXParseException exception)
- throws SAXException {
- System.out.println("FATALERROR " + exception.getMessage());
- }
- @Override
- public void error(SAXParseException exception)
- throws SAXException {
- System.out.println("ERROR " + exception.getMessage());
- throw new SAXException(exception);// akkor már nem épül fel
- // a listám, én döntöm
- // el h átengedem vagy
- // sem
- }
- });
- Document doc = builder.parse("book.xml");// import
- // org.w3c.dom.Document;
- // bejár(doc, 0);
- NodeList books = doc.getElementsByTagName("book");// dokumentumtipusú
- // csomópontra,
- // adott elemben
- // levő
- // részfában
- // levő elemek
- // listáját
- List<Könyv> katalógus = new ArrayList<Könyv>();
- for (int i = 0; i < books.getLength(); i++) {
- Element bookElement = (Element) books.item(i);
- String azon = bookElement.getAttribute("id");
- Könyv k = new Könyv(azon);
- k.setSzerző(bookElement.getElementsByTagName("author").item(0)
- .getTextContent());
- k.setCim(bookElement.getElementsByTagName("title").item(0)
- .getTextContent());
- k.setMűfaja(bookElement.getElementsByTagName("genre").item(0)
- .getTextContent());
- k.setÁr(Double
- .valueOf(bookElement.getElementsByTagName("price")
- .item(0).getTextContent()));
- k.setKiadásiDátum(Date.valueOf(bookElement
- .getElementsByTagName("publish_date").item(0)
- .getTextContent()));
- k.setLeirás(bookElement.getElementsByTagName("description")
- .item(0).getTextContent());
- katalógus.add(k);
- }
- Map<String, List<Könyv>> m = new HashMap<String, List<Könyv>>();
- for (Könyv könyv : katalógus) {
- if (m.containsKey(könyv.getMűfaja())) {
- m.get(könyv.getMűfaja()).add(könyv);
- } else {
- List<Könyv> l = new ArrayList<Könyv>();
- l.add(könyv);
- m.put(könyv.getMűfaja(), l);
- }
- }
- System.out.println(m);
- Document újDok = builder.newDocument();
- Element műfajokElem = újDok.createElement("műfajok");
- újDok.appendChild(műfajokElem);
- for (String műfaj : m.keySet()) {
- Element műfajElem = újDok.createElement("műfaj");
- műfajElem.setAttribute("név", műfaj);
- műfajokElem.appendChild(műfajElem);
- for (Könyv könyv : m.get(műfaj)) {
- Element könyvElem = újDok.createElement("könyv");
- könyvElem.setAttribute("azon", könyv.getAzon());
- műfajElem.appendChild(könyvElem);
- könyvElem.appendChild(újDok.createElement("cim"))
- .appendChild(újDok.createTextNode(könyv.getCim()));
- }
- }
- DOMImplementationLS dils = (DOMImplementationLS) builder.getDOMImplementation();
- LSSerializer lsser = dils.createLSSerializer();
- lsser.getDomConfig().setParameter("format-pretty-print", true);
- LSOutput lsout = dils.createLSOutput();
- lsout.setCharacterStream(new FileWriter("műfajok.xml"));
- lsser.write(újDok, lsout);
- } catch (ParserConfigurationException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SAXException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private static void bejár(Node n, int mélység) {
- for (int i = 0; i < mélység; i++) {
- System.out.print(" ");
- }
- System.out.println(n);
- NodeList nl = n.getChildNodes();
- for (int i = 0; i < nl.getLength(); i++) {
- bejár(nl.item(i), mélység + 1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement