Egy elem keresése adott XML dokumentumban

Ebben a fejezetben megnézzük, hogyan lehet egy XML dokumentumban megkeresni egy elemet az org.apache.xerces.parsers.DOMParser csomag által definiált DOM API-k segítésével. Ne felejtsd el, hogy a classpath-nak tartalmaznia kell a xercesImpl.jar és a xml-apis.jar fájlokat a program futtatásához. Ezek letölthetőek a Xerces projekt oldaláról.

A program leírása:

A program bekéri az XML fájl nevét és ellenőrzi az elérhetőségét. Ha a fájl létezik elemzi a parse() metódus használatával. Ez a metódus a DOMParser segítségével elemzi az XML dokumentumot. A DOMParser az org.apache.xerces.parsers.DOMParser csomagban van definiálva, nagyon jól használható DOMParser objektum létrehozására. A program bekéri a keresendő XML elem nevét. A getLength() metódussal megszámolja a megadott elem előfordulását, ha az érték 0, akkor üzenetet jelenít meg a képernyőn, egyébként a darabszámot írja ki.

A minta XML fájl, Employee-Detail.xml:

<?xml version = "1.0" ?>
<Employee-Detail>

    <Employee>
        <Emp_Id>E-001</Emp_Id>
        <Emp_Name>Vinod</Emp_Name>
        <Emp_E-mail>Vinod1@yahoo.com</Emp_E-mail>
    </Employee>

    <Employee>
        <Emp_Id>E-002</Emp_Id>
        <Emp_Name>Amit</Emp_Name>
        <Emp_E-mail>Amit2@yahoo.com</Emp_E-mail>
    </Employee>

    <Employee>
        <Emp_Id>E-003</Emp_Id>
        <Emp_Name>Deepak</Emp_Name>
        <Emp_E-mail>Deepak3@yahoo.com</Emp_E-mail>
    </Employee>

</Employee-Detail>

A program, SearchElement.java:

import org.w3c.dom.*;
import org.apache.xerces.parsers.DOMParser;
import java.io.*;

public class SearchElement {

    public static void main(String[] args) {

        try {

            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Enter file name: ");
            String str = bf.readLine();
            File file = new File(str);

            if (file.exists()) {

                DOMParser parser = new DOMParser();
                parser.parse(str);

                Document doc = parser.getDocument();
                System.out.print("Enter element that have to count: ");
                String ele = bf.readLine();
                NodeList list = doc.getElementsByTagName(ele);

                if(list.getLength() == 0) {

                    System.out.println("Element doesn't exist in the " + str + " Document.");
                }

                else {

                    System.out.println("Element occurrs " + list.getLength() + " times in the " + str);
                }
            }

            else {

                System.out.println("File not found!");
            }
        }

        catch (Exception e) {

            e.getMessage();
        }
    }
}

A következő fejezetben elkészítjük az első XML fájlt.

XML jól-formázottság

Ebben a fejezetben megtanulhatod hogyan ellenőrizhető az XML formázottsága a DOM interfész segítségével. Egy jól formázott XML dokumentumnak követnie kell az XML szintaxis szabályait.

A program leírása:

A program ellenőrzi egy XML dokumentum jól-formázottságát. Ha az XML dokumentum jól formázott, akkor jó, ellenkező esetben hiba üzenetet kell adnia a programnak. A megvalósításhoz a parser() metódus által dobott kivételt használd fel.

A minta XML fájl, Employee-Detail.xml:

<?xml version = "1.0" ?>
<Employee-Detail>

    <Employee>
        <Emp_Id>E-001</Emp_Id>
        <Emp_Name>Vinod</Emp_Name>
        <Emp_E-mail>Vinod1@yahoo.com</Emp_E-mail>
    </Employee>

    <Employee>
        <Emp_Id>E-002</Emp_Id>
        <Emp_Name>Amit</Emp_Name>
        <Emp_E-mail>Amit2@yahoo.com</Emp_E-mail>
    </Employee>

    <Employee>
        <Emp_Id>E-003</Emp_Id>
        <Emp_Name>Deepak</Emp_Name>
        <Emp_E-mail>Deepak3@yahoo.com</Emp_E-mail>
    </Employee>

</Employee-Detail>

A program, DOMParserCheck.java:

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;

public class DOMParserCheck {

    static public void main(String[] arg){

        try{

            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Enter File name: ");
            String xmlFile = bf.readLine();
            File file = new File(xmlFile);

            if(file.exists()) {

                try {

                    // Create a new factory to create parsers
                    DocumentBuilderFactory dBF = DocumentBuilderFactory.newInstance();

                    // Use the factory to create a parser (builder) and use
                    // it to parse the document.
                    DocumentBuilder builder = dBF.newDocumentBuilder();

                    // builder.setErrorHandler(new MyErrorHandler());
                    InputSource is = new InputSource(xmlFile);
                    Document doc = builder.parse(is);
                    System.out.println(xmlFile + " is well-formed!");
                }

                catch (Exception e) {

                    System.out.println(xmlFile + " isn't well-formed!");
                    System.exit(1);
                }
            }

            else {

                System.out.print("File not found!");
            }
        }

        catch(IOException io) {

            io.printStackTrace();
        }
    }
}

A következő fejezetben egy elemet keresünk adott XML dokumentumban.

Az elemek megszámolása az XML fájlban

Ebben a fejezetben megtanulhatod hogyan lehet az elemeket megszámolni az XML dokumentumban az org.apache.xerces.parsers.DOMParser csomagban definiált DOM API segítségével. A program futtatásához a classpath-nak tartalmaznia kell a xercesImpl.jar és xml-apis.jar fájlokat, ezek a Xerces-től tölthetőek le.

A program leírása:

A program bekéri a fájl nevét a konzolról, ellenőrzi annak elérhetőségét. Ha a fájl létezik létrehozunk egy DOMParser osztályt az org.apache.xerces.parsers.DOMParser csomag használatával. Az objektum elemzi az XML dokumentumot, majd a program bekéri az összeszámolandó elem nevét, és összeszámolja az előfordulását az XML fájlban. Ha az elem nem létezik, 0-val tér vissza.

A minta XML fájl, Employee-Detail.xml:

<?xml version = "1.0" ?>
<Employee-Detail>

    <Employee>
        <Emp_Id>E-001</Emp_Id>
        <Emp_Name>Vinod</Emp_Name>
        <Emp_E-mail>Vinod1@yahoo.com</Emp_E-mail>
    </Employee>

    <Employee>
        <Emp_Id>E-002</Emp_Id>
        <Emp_Name>Amit</Emp_Name>
        <Emp_E-mail>Amit2@yahoo.com</Emp_E-mail>
    </Employee>

    <Employee>
        <Emp_Id>E-003</Emp_Id>
        <Emp_Name>Deepak</Emp_Name>
        <Emp_E-mail>Deepak3@yahoo.com</Emp_E-mail>
    </Employee>

</Employee-Detail>

A program, CountNodes.java:

import org.w3c.dom.*;
import org.apache.xerces.parsers.DOMParser;
import java.io.*;

public class CountNodes {

    public static void main(String[] args) {

        try{

            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Enter file name: ");
            String str = bf.readLine();
            File file = new File(str);

            if (file.exists()) {

                DOMParser parser = new DOMParser();
                parser.parse(str);

                Document doc = parser.getDocument();
                System.out.print("Enter element that have to count: ");
                String ele = bf.readLine();
                NodeList list = doc.getElementsByTagName(ele);
                System.out.println("Number of nodes: " + list.getLength());
            }

            else {

                System.out.println("File not found!");
            }
        }

        catch (Exception e) {

            e.getMessage();
        }
    }
}

A következő fejezetben XML formátum ellenőrzéssel fogunk foglalkozni …

Az XML elemek megszámolása

Ebben a fejezetben meg fogod tanulni megszámolni az elemeket egy XML fájlban DOM API segítségével.

A program leírása:

A program segít megszámolni az XML elemeket. A program a konzolon keresztül bekéri az XML fájl nevét és ellenőrzi az elérhetőségét. Elemzi az XML dokumentumot a parse() metódussal. Az XML dokumentum elemzése után bekéri az elem nevét amit meg akarunk számolni. Készíts egy NodeList-et és használd a getElementByTagName() metódust. A getLength() metódus megszámolja a megadott elem előfordulását. Ha a megadott elem nem létezik 0-val térjen vissza.

A minta XML fájl, Employee-Detail.xml:

<?xml version = "1.0" ?>
<Employee-Detail>

    <Employee>
        <Emp_Id>E-001</Emp_Id>
        <Emp_Name>Vinod</Emp_Name>
        <Emp_E-mail>Vinod1@yahoo.com</Emp_E-mail>
    </Employee>

    <Employee>
        <Emp_Id>E-002</Emp_Id>
        <Emp_Name>Amit</Emp_Name>
        <Emp_E-mail>Amit2@yahoo.com</Emp_E-mail>
    </Employee>

    <Employee>
        <Emp_Id>E-003</Emp_Id>
        <Emp_Name>Deepak</Emp_Name>
        <Emp_E-mail>Deepak3@yahoo.com</Emp_E-mail>
    </Employee>

</Employee-Detail>

A program, DOMCountElement.java:

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;

public class DOMCountElement {

    public static void main(String[] args) {

        try {

            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Enter File name: ");
            String xmlFile = bf.readLine();
            File file = new File(xmlFile);

            if (file.exists()) {

                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

                // Create the builder and parse the fájl
                Document doc = factory.newDocumentBuilder().parse(xmlFile);

                System.out.print("Enter element name: ");
                String element = bf.readLine();

                NodeList nodes = doc.getElementsByTagName(element);
                System.out.println("xml Document Contains " + nodes.getLength() + "  elements.");
            }

            else{

                System.out.print("File not found!");
            }
        }

        catch (Exception ex) {

            System.out.println(ex);
        }
    }
}

A következő fejezetben az XML fájlban lévő elemek számolásával fogunk foglalkozni …

Az XML gyökér elem megszerzése

A fejezet elolvasása után képesek leszünk visszanyerni az XML dokumentum gyökér elemét. A JAXP (Java API for XML Processing) egységes interfészt biztosít a szabványos SAX (Simple API for XML), DOM és XSLT-ket (Extensible Stylesheet Language Transformations) tartalmazó XML fájlok készítéséhez és használatukhoz. A bemutatott példán keresztül látni fogjuk a DOM interfész használatát.

A program leírása:

Készíts egy XML fájlt. A Java és az XML fájl ugyanabban a könyvtárban legyen. A program jelenítse meg az XML fájlt a képernyőn. Ha a fájl létezik akkor végezze el a szűrést (parse) a parse() metódus használatával. Az XML dokumentum feldolgozása előtt szükséged lesz egy DocumentBuilder objektumra. Ennek a létrehozásához először egy DocumentBuilderFactory-t kell készítened. Az XML dokumentum feldolgozása után a csomópont elemet (node element) a getDocumentElement() metódussal kapod meg. A gyökér megkereséséhez a getNodeName() metódust használd.

A minta XML fájl, Employee-Detail.xml:

<?xml version = "1.0" ?>
<Employee-Detail>

    <Employee>
        <Emp_Id>E-001</Emp_Id>
        <Emp_Name>Vinod</Emp_Name>
        <Emp_E-mail>Vinod1@yahoo.com</Emp_E-mail>
    </Employee>

    <Employee>
        <Emp_Id>E-002</Emp_Id>
        <Emp_Name>Amit</Emp_Name>
        <Emp_E-mail>Amit2@yahoo.com</Emp_E-mail>
    </Employee>

    <Employee>
        <Emp_Id>E-003</Emp_Id>
        <Emp_Name>Deepak</Emp_Name>
        <Emp_E-mail>Deepak3@yahoo.com</Emp_E-mail>
    </Employee>

</Employee-Detail>

A program, GetRootNode.java:

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;

public class GetRootNode{

    public static void main(String[] args) {

        try{

            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Enter xml file name: ");
            String str = bf.readLine();
            File file = new File(str);

            if (file.exists()) {

                DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = fact.newDocumentBuilder();
                Document doc = builder.parse(str);
                Node node = doc.getDocumentElement();
                String root = node.getNodeName();
                System.out.println("Root Node: " + root);
            }

            else {

                System.out.println("File not found!");
            }
        }

        catch(Exception e) {}
    }
}

A következő fejezetben az XML elemek megszámolását fogjuk megpróbálni.