| 

.NET C# Java Javascript Exception

DOMCategory etc. - wie kann ich einen XML-Baum in einen anderen einfügen?

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


DOMCategory etc. - wie kann ich einen XML-Baum in einen anderen einfügen?

WorkingHero - 26.02.2008 23:06
Hi,

dieses Problem beschäftigt mich jetzt schon ein paar Stunden. Irgendwie hilft die Doku auch nicht wirklich weiter, GPath usw. funktioniert zwar gut, aber Modifikationen sind sehr stiefmütterlich behandelt. Bevor jetzt jemand vorschlägt ne TemplateEngine o. ähnliches zu benutzen - ginge natürlich, will aber die Templates frei von Code usw. halten und nur mittels DOMCategory oder vielleicht XPath arbeiten.

Kurzes Beispiel: Ich wollte möglichst elegant und nur mit eingebauten Groovy-/Java-Libs XML-Nodes von einem Baum in einen anderen kopieren und zwar möglichst im DOM. Hier etwas code:

        def parser = new XmlParser(false, false)
        parser.setFeature("[apache.org];, false);
        parser.setFeature("[xml.org];, false)

        def template
        use(groovy.xml.dom.DOMCategory) {
            template = parser.parse(new File('template.xml'))

            def el = template.body.div.find {it['@id'] == 'test1'}.div.find {it['@id'] == 'test2'}.div.find {it['@id'] == 'test3'}
        }

An dem Punkt wäre es natürlich schön einen beliebigen anderen Baum (Template, Inhalt) usw. einfügen zu können.

def foo = createFoo().toString()

        def reader = new StringReader(foo)
        use(groovy.xml.dom.DOMCategory) {
            def doc = groovy.xml.DOMBuilder.parse(reader)
            def root = doc.documentElement

            def divs = root.div
            divs.each {
                println it

                el.appendNode(it) // mag er nicht
            }
        }

Natürlich baut Xerces alles lazy auf und fliegt beim Einfügen schön raus. Die Art und Weise ist natürlich etwas hackig (XSLT-Fans einfach wegschauen), aber prinzipiell sollte so ein Problem ja öfter vorkommen. Bin auch mit dem StreamMarkupBuilder gut voran gekommen, aber da ist wieder das Problem dass sich XML-Templates nur als Leafs einfügen lassen, daher fand ich das nicht optimal.

Bin für alle Vorschläge offen! Es muss doch irgendeinen Standardweg geben um XML aus beliebigen Quellen mit Groovy-Bordmitteln miteinander verknüpfen zu können.


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "DOMCategory etc. - wie kann ich einen XML-Baum in einen anderen einfügen?" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.