Hallo Forum,
ich habe folgendes (eigentlich einfaches Problem): Ich habe eine XML Datei in der geprüft werden soll, ob die darin befindlichen Elemente ein Unterelement mit bestimmten Namen haben. Wenn das so ist, sollen nur diese Elemente wiederum in ein zweites XML geschrieben werden. Also ein Filter auf die Struktur, wo am Ende nur noch die Elemente enthalten sind, die dem Filter entsprechen. Ich bekomme es aber einfach nicht hin...
Das Auslesen und Filter klappt, nur das Schreiben nicht.
Beispiel der XML Struktur:
Mein letzter Ansatz:
crasht mit der Fehlermeldung:
Das sollte doch eigentlich relativ einfach zu lösen sein, oder? Oder muss ich doch durch alle Unterknoten und die dann auslesen und als neue Elemente hinzufügen?
Gruß,
MAF1981
ich habe folgendes (eigentlich einfaches Problem): Ich habe eine XML Datei in der geprüft werden soll, ob die darin befindlichen Elemente ein Unterelement mit bestimmten Namen haben. Wenn das so ist, sollen nur diese Elemente wiederum in ein zweites XML geschrieben werden. Also ein Filter auf die Struktur, wo am Ende nur noch die Elemente enthalten sind, die dem Filter entsprechen. Ich bekomme es aber einfach nicht hin...
Das Auslesen und Filter klappt, nur das Schreiben nicht.
Beispiel der XML Struktur:
Code:
<Root> <Feature id='234'> <Usage>Standard</Usage> <Quantity>1.3</Quantity> <SubFeatures> <Feature id='163'> <Usage>Standard</Usage> <Quantity>8.0</Quantity> <SubFeatures></SubFeatures> </Feature> </SubFeatures> </Feature> <Feature id='578'> <Usage>Standard</Usage> <Quantity>2.7</Quantity> <SubFeatures></SubFeatures> </Feature> <Feature id='911'> <Usage>Standard</Usage> <Quantity>8.0</Quantity> <SubFeatures></SubFeatures> <Pending id='888'/> </Feature> <Feature id='001'> <Usage>Standard</Usage> <Quantity>1.0</Quantity>" <Pending id='999'/> <SubFeatures></SubFeatures> </Feature> </Root>
Code:
SAXBuilder builder = new SAXBuilder(); InputStream isXMLBOM = new ByteArrayInputStream(sBOMXML.getBytes()); // Das ist die XML Struktur oben als String Document docXMLIn = builder.build(isXMLBOM); Element elementEngineeringBOM = docXMLIn.getRootElement(); //output XML Element elementNewStructure = new Element(elementEngineeringBOM.getName()); Document docXMLOut = new Document(elementNewStructure); docXMLOut.setDocType(docXMLIn.getDocType()); Filter filter = new ElementFilter("Pending"); Iterator<Content> it = docXMLIn.getDescendants(filter); while (it.hasNext()) { Content content = (Content) it.next(); Element elementParent = content.getParentElement(); //hier geht es schief... elementNewStructure.addContent(elementParent); }
Code:
System Error: #5000001: IllegalAddException: The Content already has an existing parent "Root"
Gruß,
MAF1981
Comment