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

import org.xml.sax.SAXException;  
import org.xml.sax.SAXParseException;

import java.io.FileInputStream;
import java.io.File;
import java.io.IOException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.DOMException;

public class DOMSample
{
    public static void main( String[] args )
    {
        try
        {
            File plik = new File( "book.xml" );
            if( !plik.exists() )
            {
                System.out.println( "Nie znaleziono pliku..." );
                return;
            }

        // Analizuj dokument
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document dokument = builder.parse( file );

            // Przebiegaj dokument
            Element korzeń = document.getDocumentElement();
            System.out.println( "korzeń=" + korzeń.getTagName() );

            // Wymień węzły potomne węzła <książki> — zbiór elementów <książka>
            NodeList lista = korzeń.getChildNodes();
            for( int i=0; i<lista.getLength(); i++ )
            {
                Node węzeł = lista.item( i );
                if( węzeł.getNodeType() == węzeł.ELEMENT_NODE )
                {
            // Znaleziony element <książka>
            System.out.println( "Bieżący węzeł: " + węzeł.getNodeName() );
            Element element = ( Element )węzeł;
            System.out.println( "\tAtrybut Kategoria: " + element.getAttribute( "kategoria" ) );
                    
            // Znajdź węzły potomne: <autor>, <tytuł>, <cena>
            NodeList listaPotomnych = element.getChildNodes();
                    for( int j=0; j<listaPotomnych.getLength(); j++ )
                    {
            // Gdy jeden z tych węzłów został odnaleziony, trzeba
            // odnaleźć jego element tekstowy
                        Node węzełPotomny = listaPotomnych.item( j );
            if( węzełPotomny.getNodeType() == węzełPotomny.ELEMENT_NODE )
            {
                NodeList listaWęzłówPotomnych = węzełPotomny.getChildNodes();
                for( int k=0; k<listaWęzłówPotomnych.getLength(); k++ )
                {
                Node innerChildNode = listaWęzłówPotomnych.item( k );
                System.out.println( "\t\tWęzeł=" + innerChildNode.getNodeValue() ); 
                }
            }
                    }
                }
            }
        } catch( Exception e )
        {
            e.printStackTrace();
        }
    }
}
