Archive Page 2



DOM gyermek elem (child element) létrehozása

Ebben a fejezetben a gyökér és gyermek elem létrehozásáról lesz szó a DOM fában (DOM tree). Először egy üres DOM dokumentumot készítünk, és hozzáadjuk a gyökér elemet. Utána megjegyzés majd gyermek elemet fogunk a gyökér elemhez adni. A lecke során a következő XML kódot fogjuk elkészíteni és megjeleníteni a konzolon.

<?xml version="1.0" encoding="UTF-8" ?>
<root>
<!-- This is comment-->
<Child attribute1="The value of Attribute 1" />
</root>

A gyökér elem létrehozása:

Az előző leckében megtanultuk hogyan készítsük el a DocumentBuilder objektumot és hozzuk létre az üres DOM dokumentumot. A következő kódrészlet elkészíti az üres dokumentumot.

//Create blank DOM Document
Document doc = docBuilder.newDocument();

A createElement funkciót használhatjuk a gyökér elem létrehozására, majd az appendChild metódussal fűzhetjük hozzá a létrehozott elemet a DOM dokumentumhoz.

//create the root element
Element root = doc.createElement("root");

//all it to the xml tree
doc.appendChild(root);

Megjegyzés elem hozzáadása a DOM fához:

A doc.createComment funkcióval készíthetünk megjegyzés objektumot.

//create a comment
Comment comment = doc.createComment("This is comment");

//add in the root element
root.appendChild(comment);

Gyerkmek elem hozzáadása a DOM fához:

A doc.createElement funkcióval készíthetünk gyermek elemet.

//create child element
Element childElement = doc.createElement("Child");

//Add the atribute to the child
childElement.setAttribute("attribute1","The value of Attribute 1");
root.appendChild(childElement);

A DOM fa megjelenítése a konzolon a következő kódrészlettel lehetséges:

TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();

Source src = new DOMSource(doc);
Result dest = new StreamResult(System.out);
aTransformer.transform(src, dest);

Minta, CreateDomXml.java:

import org.w3c.dom.*;

import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

class CreateDomXml {

    public static void main(String[] args) {

        try{

            //Create instance of DocumentBuilderFactory
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

            //Get the DocumentBuilder
            DocumentBuilder docBuilder = factory.newDocumentBuilder();

            //Create blank DOM Document
            Document doc = docBuilder.newDocument();

            //create the root element
            Element root = doc.createElement("root");

            //add it to the xml tree
            doc.appendChild(root);

            //create a comment
            Comment comment = doc.createComment("This is comment");

            //add in the root element
            root.appendChild(comment);

            //create child element
            Element childElement = doc.createElement("Child");

            //Add the atribute to the child
            childElement.setAttribute("attribute1","The value of Attribute 1");
            root.appendChild(childElement);

            TransformerFactory tranFactory = TransformerFactory.newInstance();
            Transformer aTransformer = tranFactory.newTransformer();

            Source src = new DOMSource(doc);
            Result dest = new StreamResult(System.out);
            aTransformer.transform(src, dest);
        }

        catch(Exception e) {

            System.out.println(e.getMessage());
        }
    }
}

A következő fejezetben az XML gyökér objektum megszerzéséről lesz szó.

Üres DOM dokumentum létrehozása

Ebben a fejezetben bemutatom, hogyan lehet üres DOM dokumentumot létrehozni. A JAXP (Java API for XML Processing) egy Java interfész, ami az XML dokumentumok elemzésének egy szabványos megközelítése. A JAXP-al a DocumentBuilderFactory-t fogjuk használni a DocumentBuilder osztály létrehozásához.

A DocumentBuilderFactory osztály felelős az új DOM elemzők (parsers) létrehozásáért. Általában ezt használják DOM elemzőként.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();

//The parse function is used to parse existing xml document.
Document doc = parser.parse(myInputSource);

A DocumentBuilderFactory a javax.xml.parsers.XmlDocumentParserFactory nevű rendszerváltozót használja, hogy megtalálja a betöltendő osztályt. Így az elemzőt bármikor megváltoztathatjuk:

System.setProperty("javax.xml.parsers.XmlDocumentParserFactory", "com.foo.myFactory");

A DocumentBuilder osztály példánya való üres dokumentum készítésére. Az osztály newDocument() metódusa egy üres DOM dokumentummal tér vissza.

Document doc = parser.newDocument();

Minta, CreateBlankDocument.java:

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public class CreateBlankDocument {

    public static void main(String[] args) {

        System.out.println("Creating Balnk Document...");

        try{

            //Create instance of DocumentBuilderFactory
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

            //Get the DocumentBuilder
            DocumentBuilder parser = factory.newDocumentBuilder();

            //Create blank DOM Document
            Document doc = parser.newDocument();
        }

        catch(Exception e) {

            System.out.println(e.getMessage());
        }

        System.out.println("Done...");
        System.out.println("Exiting...");
    }
}

A következő fejezetben a gyökér- és gyermek elemekkel fogunk foglalkozni.

Dátum manipulációs trükkök

Tegnap egy olyan programot kellett készítenem, amiben mindenféle időpontokkal kellett műveleteket végeznem, pl. a holnapi dátumra volt szükségem, vagy a hónap első napjára, és mind ezt Java-ban. A következő kódrészleteket a Google-val találtam, és mivel nagyon hasznos volt számomra, úgy döntöttem, hogy a blogomat újra nyitom, és megtöltöm hasznos kódrészletekkel ;-).

Dátum formázása:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");
Date newDate = new Date();
String newdate = dateformat.format(newDate);
System.out.println(newdate);

Napok hozzáadása a dátumhoz:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);    //Adding 1 day to current date
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Hónapok hozzáadása a dátumhoz:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);    //Adding 1 month to current date
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Évek hozzáadása a dátumhoz:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, 1);    //Adding 1 year to current date
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Évek kivonása a dátumból:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -1);    //-1 for subtracting
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Hónapok kivonása a dátumból:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);    //-1 for subtracting
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Napok kivonása a dátumból:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);    //-1 for subtracting
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Órák hozzáadása a dátumhoz:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, 1);    //Adding 1 hour to current date time
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Percek hozzáadása a dátumhoz:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, 10);    //Adding 10 minute to current date time
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Másodpercek hozzáadása a dátumhoz:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 40);    //Adding 40 minute to current date time
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Órák kivonása a dátumból:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, -1);    //Subtracting 1 hour to current date time
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Percek kivonása a dátumból:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, -10);    //Subtracting 10 minute to current date time
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Másodpercek kivonása a dátumból:

SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, -40);    //Subtracting 40 minute to current date time
String newdate = dateformat.format(cal.getTime());
System.out.println(newdate);

Forrás: http://www.hiteshagrawal.com/java/date-manipulation-in-java

Biztonsági probléma a Sun JRE-ben

A Sun Microsystems arra figyelmeztet, hogy biztonsági sebezhetőség található a Sun Java Runtime Environment-ben (JRE). A bug az unpack200 névre hallgató JAR Upacking Tool-t érinti. A rosszindulatú támadó speciálisan összeállított Java archive segítségével a hibát kihasználva tetszőleges kódot injektálhat illetve hajthat végre a felhasználó számítógépén, annak jogosultságaival. Bizonyos esetekben a hiba kihasználására akár egy speciálisan preparált weboldal meglátogatásakor is sor kerülhet.

A bug a Java JDK és JRE 5 Update 17 és korábbi, illetve a 6 update 12 és korábbi verziókban található. Mind a Windows, mind a Linux, mind a Solaris verziók érintettek. A Sun megjegyezte, hogy az 1.4.2-es és 1.3.1-es verziók nem érintettek.

A felhasználók a parancssort használva megállapíthatják, hogy milyen Java verziót futtatnak. Ehhez a “java -version” parancsot kell végrehajtani. Firefox böngészőkben az “about:plugins” lap is információkkal szolgálhat. Ezen kívül megállapítható a telepített Java verziója a “Verify Java Version” weboldal meglátogatásával.

A problémás verziót futtatóknak érdemes mielőbb frissíteni a Java 5 Update 18-ra vagy a Java 6 Update 13-ra.

A részletek itt olvashatók.

Forrás: Hungarian Unix Portal

Java SE 6 Update 13

Csendben kijött a Java 6 Standard Edition 13.  frissített kiadása, benne egy apró maroknyi hibajavítás.

Kiadási megjegyzések itt, letölthető innen.