4. Einfache Programmierbeispiele mit JDOM
2. JDOM-Programmierbeispiel:
XML einlesen, Element hinzufügen und neue XML-DateierzeugenDieses Programmierbeispiel erfüllt die gleichenAnforderungen mit JDOM, wie das oben aufgeführteProgrammierbeispiel 'ExampleDomAddWrite.java'mit JAXP-DOM erfüllt hat. Das JDOM-Beispiel erzeugt eineschön formatierte Ausgabe und ist kürzer und einfacher. In einer XML-Datei wird ein bestimmtes Element gesucht,dessen Childelement einen bestimmten Text enthält. Vor dieses Element wird ein neues Element plaziert und das
Ergebnis in eine neue XML-Datei gespeichert.
Im gleichen Verzeichnis, wo sich die oben gezeigte
Beispiel-XML-Datei 'MyXmlFile.xml'
befindet, speichern Sie den folgenden Java-Sourcecode unter
dem Namen 'ExampleJdomAddWrite.java' und
kompilieren und führen ihn aus mit:
javac -classpath .;jdom.jar
ExampleJdomAddWrite.java
java -classpath .;jdom.jar ExampleJdomAddWrite
MyXmlFile.xml NewXmlFile.xml Button Title "Mein
dritter Button" "Mein neuer Button"
|
Bezüglich des Kommandozeilenteils '-classpath
.;jdom.jar' beachten Sie bitte die Hinweise unter 'JDOM-Voraussetzungen'
und '1.
JDOM-Programmierbeispiel'.
Falls Ihr Webbrowser die mit "java"
beginnende Zeile auf zwei Zeilen umgebrochen hat: Bitte
geben Sie diese als eine einzige Kommandozeile ein.
Die Kommandozeilenparameter haben folgende Bedeutung:
Parameter |
Beispiel |
Bedeutung |
<XmlFile> |
MyXmlFile.xml |
Diese XML-Datei wird zu Beginn gelesen |
<NewFile> |
NewXmlFile.xml |
In diese XML-Datei wird das Ergebnis
geschrieben (falls die Suchbedingungen erfüllt
werden) |
<MainElem> |
Button |
Es werden Elemente mit diesem Tag-Namen
gesucht |
<Child> |
Title |
Das gesuchte Element muss ein Child-Element
mit diesem Tag-Namen haben |
<FindVal> |
"Mein dritter Button" |
Das Child-Element muss diesen Text als
Inhalt haben |
<New> |
"Mein neuer Button" |
Nur wenn die vorhergehenden Suchbedingungen
erfüllt sind, wird ein neues Element mit diesem
Child-Element-Inhalt vor das gefundene Element
eingefügt |
Mit der Beispiel-XML-Datei 'MyXmlFile.xml'
und den angegebenen Beispielparametern wird das dritte <Button>-Element
gefunden, da dessen <Title>-Text mit der
Suchvorgabe <FindVal>="Mein dritter
Button" übereinstimmt. Vor dieses <Button>-Element
wird ein neues <Button>-Element mit dem
angegebenen <Title>-Text <New>="Mein
neuer Button" eingefügt. Das Ergebnis wird in die
Datei 'NewXmlFile.xml' gespeichert.
// ExampleJdomAddWrite.java
import java.util.*;
import java.io.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
public class ExampleJdomAddWrite
{
public static void main( String[] args )
{
if( args.length != 6 )
{
System.err.println( "Attention:" );
System.err.println( "jdom.jar must be added to classpath." );
System.err.println( "Usage:" );
System.err.println( "java ExampleJdomAddWrite <XmlFile> <NewFile>"
+ " <MainElem> <Child> <FindVal> <New>" );
System.err.println( "Example:" );
System.err.println( "java -classpath .;jdom.jar ExampleJdomAddWrite"
+ " MyXmlFile.xml NewXmlFile.xml Button Title"
+ " \"Mein dritter Button\" \"Mein neuer Button\"" );
System.exit( 1 );
}
try {
// ---- Read XML file ----
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build( new File( args[0] ) );
// ---- Modify XML data ----
Element root = doc.getRootElement();
List listMainElements = root.getChildren( args[2] ); // <MainElem>
for( int i=0; i<listMainElements.size(); i++ )
{
// Find searched element with given text:
Element elMain = (Element)(listMainElements.get( i ));
if( null == elMain ) continue;
Element elChild = elMain.getChild( args[3] ); // <Child>
if( null == elChild ) continue;
String s = elChild.getTextTrim();
if( null == s || !s.equals( args[4] ) ) continue; // <FindVal>
// Add new element at correct positeon:
Element elNew = new Element( args[2] ); // <MainElem>
elNew.addContent( (new Element( args[3] )).addContent( args[5] ) );
listMainElements.add( i, elNew ); // <New>
// ---- Write XML file ----
XMLOutputter outp = new XMLOutputter();
outp.setIndent( " " );
outp.setNewlines( true );
outp.output( doc, new FileOutputStream( new File( args[1] ) ) );
break; // <NewFile>
}
} catch( Exception ex ) {
ex.printStackTrace();
}
}
}
|
|