# XML auslesen, Elemente daraus entfernen und als neue XML zurückgeben



## zero (25. Feb 2009)

Hallo zusammen,

ich habe folgendes Problem.
Eine XML Datei soll eingelesen werden, Elemente sollen daraus entfernt werden und
anschließend möchte ich das verkleinerte Ergebnis an den Transformator zurückgeben.

Bis zu dem Teil mit dem Elemente aus der XML entfernen bin ich schon gekommen. Zumindest kann ich mir die gewünschten Elemente ausgeben lassen.

[HIGHLIGHT="Java"]public static final Source getResultXML(URL url) {
System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "net.sf.saxon.dom.DocumentBuilderFactoryImpl");
        try {
            XPath xpath = net.sf.saxon.xpath.XPathFactoryImpl.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON).newXPath();
            InputSource inputSrc = new InputSource(url.openStream());
            SAXSource saxSrc = new SAXSource(inputSrc);

            NodeInfo nodeInfo = ((XPathEvaluator) xpath).setSource(saxSrc);

            XPathExpression findElement = xpath.compile("//ELEMENTE//ELEMENT[@id=7048]");

            List matchedElements = (List) findElement.evaluate(nodeInfo, XPathConstants.NODESET);

            if(matchedElements != null) {
                for(Iterator iterator = matchedElements.iterator(); iterator.hasNext() {
                    NodeInfo line = (NodeInfo) iterator.next();
                    /*Node node = line.item(0);
                    node.getParentNode().removeChild(node);*/
                }
            }
            return saxSrc;
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        catch(XPathFactoryConfigurationException e) {
            e.printStackTrace();
        }
        catch(XPathExpressionException e) {
            e.printStackTrace();
        }
        catch(XPathException e) {
            e.printStackTrace();
        }
        catch(ClassCastException e) {
            e.printStackTrace();
        }
}[/HIGHLIGHT]

[HIGHLIGHT="Java"]Source xmlSrc = XMLs.getResultXML(xmlURL);
TransformerFactory tfactory = TransformerFactory.newInstance();
                Transformer transformer = tfactory.newTransformer(new StreamSource(xslFile));

                transformer.transform(xmlSrc), new StreamResult(out));[/HIGHLIGHT]


Bin ich auf dem richtigen Weg? 
Und wie übergebe ich das Ergebnis an den Transformator?


Danke und Grüße
Zero


----------



## iwankoenig (4. Mrz 2009)

Onkel google schon gefragt?
https://vu.fernuni-hagen.de/lvuweb/...ial/ungetaktet/javainsel5/javainsel13_005.htm


----------



## zero (4. Mrz 2009)

Okay, vielleicht hab ich mich etwas zu einfach Ausgedrückt.

Ich möchte über Saxon einen XPath 2 Query auf die XML anwenden,
anschließend die Knoten, die ich als Ergebnis bekomme aus der Ursprungs-XML
entfernen und als neues XML Dokument zurückgeben.

Wichtig hierbei ist der Umweg über Saxon's XPath Engine, da ich XPath 2.0 unterstützung benötige.

Hat jemand einen Tip? Ich steh wirklich auf dem Schlauch.

P.S.: @iwankoenig: Die Seite kenn ich auch, sie hilft mir in meinem Fall aber leider nicht bzw. sehe ich nicht wie.


----------

