4. Einfache Programmierbeispiele mit JDOM
3. JDOM-Programmierbeispiel:
XML einlesen, Element mit Attribut suchen, Attribut ergänzen,XML speichernIn einer XML-Datei wird ein bestimmtes Element gesucht,dessen Attribut einen bestimmten Wert hat. Diesem Elementwird ein neues Attribut hinzugefügt und das Ergebnis ineine neue XML-Datei gespeichert. Im gleichen Verzeichnis, wo sich die oben gezeigteBeispiel-XML-Datei 'MyXmlFile.xml'befindet, speichern Sie den folgenden Java-Sourcecode unter dem Namen 'ExampleJdomAttr.java' und kompilieren
und führen ihn aus mit:
javac -classpath .;jdom.jar
ExampleJdomAttr.java
java -classpath .;jdom.jar ExampleJdomAttr
MyXmlFile.xml NewXmlFile.xml Button size small col
blue
|
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) |
<Elem> |
Button |
Es werden Elemente mit diesem Tag-Namen
gesucht |
<AttrS> |
size |
Das gesuchte Element muss ein Attribut mit
diesem Namen haben |
<ValS> |
small |
Das Attribut muss diesen Wert haben |
<AttrNew> |
col |
Nur wenn die vorhergehenden Suchbedingungen
erfüllt sind, wird ein neues Attribut mit diesem
Namen hinzugefügt |
<ValN> |
blue |
Das neue Attribut erhält diesen Wert |
Mit der Beispiel-XML-Datei 'MyXmlFile.xml'
und den angegebenen Beispielparametern wird das zweite <Button>-Element
gefunden, da dessen size-Attribut den gesuchten
Wert <ValS>="small" hat. Diesem <Button>-Element
wird ein neues Attribut mit dem angegebenen Namen <AttrNew>=col
und dem Wert <ValN>="blue" hinzugefügt.
Das Ergebnis wird in die Datei 'NewXmlFile.xml'
gespeichert.
// ExampleJdomAttr.java
import java.util.*;
import java.io.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
public class ExampleJdomAttr
{
public static void main( String[] args )
{
if( args.length != 7 )
{
System.err.println( "Attention:" );
System.err.println( "jdom.jar must be added to classpath." );
System.err.println( "Usage:" );
System.err.println( "java ExampleJdomAttr <XmlFile> <NewFile>"
+ " <Elem> <AttrS> <ValS> <AttrNew> <ValN>" );
System.err.println( "Example:" );
System.err.println( "java -classpath .;jdom.jar ExampleJdomAttr"
+ " MyXmlFile.xml NewXmlFile.xml"
+ " Button size small col blue" );
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 attribute:
Element elMain = (Element)(listMainElements.get( i ));
if( null == elMain ) continue;
String s = elMain.getAttributeValue( args[3] ); // <AttrS>
if( null == s || !s.equals( args[4] ) ) continue; // <ValS>
// Add new attribute to correct element:
elMain.setAttribute( args[5], args[6] ); // <AttrNew>=<ValN>
// ---- Write result ----
XMLOutputter outp = new XMLOutputter();
outp.setIndent( " " );
outp.setNewlines( true );
// ---- Show the modified element on the screen ----
System.out.println( "\nModified Element:\n" );
outp.output( elMain, System.out );
System.out.println();
// ---- Write the complete result document to XML file ----
outp.output( doc, new FileOutputStream( new File( args[1] ) ) );
break; // <NewFile>
}
} catch( Exception ex ) {
ex.printStackTrace();
}
}
}
|
|