{"id":13346,"date":"2019-06-28T12:00:40","date_gmt":"2019-06-28T10:00:40","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=13346"},"modified":"2019-06-28T10:21:21","modified_gmt":"2019-06-28T08:21:21","slug":"wie-kann-mit-java-8-und-dem-dom-parser-einfach-eine-xml-datei-erzeugt-werden","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=13346","title":{"rendered":"Wie kann mit Java 8 und dem DOM-Parser einfach eine XML Datei erzeugt werden?"},"content":{"rendered":"<p>Wie kann mit Java 8 mit dem <a href=\"https:\/\/de.wikipedia.org\/wiki\/Document_Object_Model\" rel=\"noopener noreferrer\" target=\"_blank\">DOM<\/a>-Parser einfach eine XML Datei erzeugt werden?<\/p>\n<p>Es sind keine weiteren Abh\u00e4ngigkeiten n\u00f6tig. Allso keine imports von Fremdjars. Alles ist in Java 8 vorhanden:<\/p>\n<pre class=\"lang:java decode:true \" >\r\nimport java.io.File;\r\nimport javax.xml.parsers.DocumentBuilderFactory;\r\nimport javax.xml.transform.OutputKeys;\r\nimport javax.xml.transform.Transformer;\r\nimport javax.xml.transform.TransformerFactory;\r\nimport javax.xml.transform.dom.DOMSource;\r\nimport javax.xml.transform.stream.StreamResult;\r\nimport org.w3c.dom.Document;\r\nimport org.w3c.dom.Element;\r\n<\/pre>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/06\/Die-Liebe-Versagt-nie-2019-k2-700x525.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/06\/Die-Liebe-Versagt-nie-2019-k2-700x525.jpg\" alt=\"\" width=\"700\" height=\"525\" class=\"aligncenter size-full wp-image-13350\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/06\/Die-Liebe-Versagt-nie-2019-k2-700x525.jpg 700w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/06\/Die-Liebe-Versagt-nie-2019-k2-700x525-300x225.jpg 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><br \/>\nEs muss ein DOM Object mit der Baumstruktur erzeugt werden. Dann kann mit dem Transformer und dem StreamResult in eine Datei geschrieben werden.<\/p>\n<p>Hier nun die drei Schritte:<\/p>\n<p>1. Mit der DocumentBuilderFactory ein neues Document erzeugen:<\/p>\n<pre class=\"lang:java decode:true \" >\r\nDocument doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()\r\n<\/pre>\n<p>2. Ben\u00f6tigte Elemente und Attribute erzeugen und dem Dokument hinzuf\u00fcgen<!--more--><\/p>\n<pre class=\"lang:java decode:true \" >\r\nElement root = doc.createElement(\"map\");\r\nroot.setAttribute(\"version\", \"www.wenzlaff.info 1.0.0\");\r\ndoc.appendChild(root);\r\n<\/pre>\n<p>3. den erzeugen Tree mit dem Transformer mit DOMSource mit StreamResult transformieren und in eine Datei speichern<\/p>\n<pre class=\"lang:java decode:true \" >\r\nTransformer transformer = TransformerFactory.newInstance().newTransformer();\r\ntransformer.setOutputProperty(OutputKeys.INDENT, \"yes\");\r\ntransformer.setOutputProperty(\"{http:\/\/xml.apache.org\/xslt}indent-amount\", \"2\");\r\nDOMSource domSource = new DOMSource(doc);\r\n\r\nStreamResult streamResult = new StreamResult(new File(zielMindmapName + \".mm\"));\r\ntransformer.transform(domSource, streamResult);\r\n<\/pre>\n<p>Es wird dann die folgende XML Datei erzeugt:<\/p>\n<pre class=\"lang:xhtml decode:true \" >&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?&gt;\r\n&lt;root version=\"www.wenzlaff.info 1.0.0\"&gt;\r\n  &lt;kind NAME=\"Thomas Wenzlaff\"\/&gt;\r\n&lt;\/root&gt;<\/pre>\n<p>Hier nun das ganze Beispiel als JUnit Test:<\/p>\n<pre class=\"lang:java decode:true \" > \r\n\t \/*\r\n\t * DOM Parser Test Beispiel\r\n\t * \r\n\t * @author Thomas Wenzlaff\r\n\t * @throws Exception bei Fehler\r\n\t *\/\r\n\t@Test\r\n\tpublic void checkDOMParsre() throws Exception {\r\n\r\n\t\t\/\/ 1. Mit der DocumentBuilderFactory ein neuse Document erzeugen:\r\n\t\tDocument doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();\r\n\r\n\t\t\/\/ 2. Ben\u00f6tigte Elemente erzeugen und dem Dokument hinzuf\u00fcgen\r\n\r\n\t\tElement root = doc.createElement(\"root\");\r\n\t\troot.setAttribute(\"version\", \"www.wenzlaff.info 1.0.0\");\r\n\t\tdoc.appendChild(root);\r\n\r\n\t\t\/\/ (optional) ein Kind dem root hinzuf\u00fcgen\r\n\t\tElement kind = doc.createElement(\"kind\");\r\n\t\tkind.setAttribute(\"NAME\", \"Thomas Wenzlaff\");\r\n\t\troot.appendChild(kind);\r\n\r\n\t\t\/\/ 3. den erzeugen Tree mit dem Transformer mit DOMSource mit StreamResult\r\n\t\t\/\/ transformieren und in eine Datei speichern\r\n\t\tTransformer transformer = TransformerFactory.newInstance().newTransformer();\r\n\t\t\/\/ (optional) Property f\u00fcr die Formatierung setzen\r\n\t\ttransformer.setOutputProperty(OutputKeys.INDENT, \"yes\");\r\n\t\ttransformer.setOutputProperty(\"{http:\/\/xml.apache.org\/xslt}indent-amount\", \"2\");\r\n\r\n\t\tDOMSource domSource = new DOMSource(doc);\r\n\r\n\t\tStreamResult streamResult = new StreamResult(new File(\"dom-parsre-test.xml\"));\r\n\t\ttransformer.transform(domSource, streamResult);\r\n\r\n\t\t\/\/ 4. (optional) f\u00fcr Debug zweckt das XML File auf der Konsole ausgeben\r\n\t\tStreamResult streamResultKonsole = new StreamResult(System.out);\r\n\t\ttransformer.transform(domSource, streamResultKonsole);\r\n\r\n\t\tassertNotNull(streamResult);\r\n\t}\r\n<\/pre>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/06\/dom.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/06\/dom.png\" alt=\"\" width=\"2106\" height=\"1186\" class=\"aligncenter size-full wp-image-13352\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/06\/dom.png 2106w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/06\/dom-300x169.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/06\/dom-768x433.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/06\/dom-1024x577.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wie kann mit Java 8 mit dem DOM-Parser einfach eine XML Datei erzeugt werden? Es sind keine weiteren Abh\u00e4ngigkeiten n\u00f6tig. Allso keine imports von Fremdjars. Alles ist in Java 8 vorhanden: import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; 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; Es muss ein DOM Object mit &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=13346\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eWie kann mit Java 8 und dem DOM-Parser einfach eine XML Datei erzeugt werden?\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,5,1361,79],"tags":[3706,3709,3693,3699,3707,3708,3710,3692,3696,3687,3688,3689,3705,3697,3703,2578,3691,3695,3698,3694,3704,3690,3702,3711,3700,102,3701],"class_list":["post-13346","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-java","category-java-8","category-programmierung","tag-abstraktionsebene","tag-anwendungsbeispiel","tag-attributknoten","tag-austauschformat","tag-browserhersteller","tag-datenrepositorium","tag-dokumentfragmentknoten","tag-dokumentknoten","tag-dokumentteilen","tag-dom","tag-dom-parser","tag-erzeugn-von-xml","tag-hintergrundfarbe","tag-interpretation","tag-menschenlesbaren","tag-parser","tag-schnittstellen","tag-serialisierung","tag-standardisieren","tag-standardisiert","tag-standardisierung","tag-strukturierten","tag-unterschiedliche","tag-verwandtschaftsbeziehungen","tag-wiedergabearten","tag-xml","tag-zugrundeliegende"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/13346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13346"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/13346\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13346"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}