package elte.java2_utikalauz5.xml; import javax.xml.parsers.*; import org.w3c.dom.*; import java.util.Properties; //Az alábbi importokra a kimenet generáláshoz van egyedül szükség. import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.StringWriter; /** DOM példaprogram. @link.forrásfájl {@docRoot}/../data/xml/src DomDemo.java @link.letöltés {@docRoot}/../data/xml DomDemo.jar @since Java 2 Útikalauz programozóknak 5.0 */ public class DomDemo { public static void main( String[] args ) { try { /* Standard módon a következő sorok kérnek el egy * példányt a konkrét DOM értelmező megvalósításból. * Csinálhatnánk úgy is, hogy rögtön a memóriában felépítünk * egy XML DOM reprezentácót, de most a példa kedvééert ezt * fájlból fogjuk felolvasni. */ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating( true ); //true az alapértelmezés DocumentBuilder parser = factory.newDocumentBuilder(); //Beolvassuk az XML fájlt és felépítjük a DOM-t. Document doc = parser.parse( "elso_dtd.xml" ); //Most létrehozunk egy új név objektumot. Element nameElement = doc.createElement( "név" ); Element familyNameElement = doc.createElement( "családnév" ); Element lastNameElement = doc.createElement( "keresztnév" ); familyNameElement.appendChild( doc.createTextNode( "Joe" ) ); lastNameElement.appendChild( doc.createTextNode( "Smith" ) ); nameElement.appendChild( familyNameElement ); nameElement.appendChild( lastNameElement ); nameElement.appendChild( doc.createElement( "férfi" ) ); //Most pedig hozzáadjuk a lánykori="igaz"-t is a -hez. nameElement.setAttribute( "lánykori", "igaz" ); //Megkeresük a DOM-ban a lista objektumot. //Az alábbi sor az összes előfordulást visszadja (1 darabot). NodeList listNodeList = doc.getElementsByTagName( "lista" ); if ( listNodeList.getLength() != 1 ) throw new Exception( "Pontosan 1 lehet!" ); Node listNode = listNodeList.item( 0 ); //Az első a listán //Az új nevet beszúrjuk a végére. listNode.appendChild( nameElement ); //Vegül kiírjuk a listát XML formában. Ehhez már használni fogjuk //az XSLT Java API-t. TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transformer = transFactory.newTransformer(); Properties props = new Properties(); //Beállítunk egy saját értéket props.put( "indent", "yes" ); //A kimenet formázása megengedett transformer.setOutputProperties( props ); DOMSource source = new DOMSource( doc ); //Ez a bemenet, egy DOM StringWriter out = new StringWriter(); StreamResult result = new StreamResult( out ); //a kimenet transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-2"); transformer.transform( source, result ); System.out.println( out.toString() ); } catch (Exception e) { System.err.println( "Hiba:" + e ); } } }