XML: Utilisation de ‘StreamFilter’ pour analyser le document

Author:


{filelink=982}


import java.io.*;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import javax.xml.stream.*;
import javax.xml.stream.events.*;
import java.util.Date;
import javax.xml.namespace.QName;

public class AnalyseXML implements javax.xml.stream.StreamFilter
{

    public static final String getTypeEvt(int eventType) {
        switch (eventType)
        {
        case XMLEvent.START_ELEMENT:
	               return "DEBUT_ELEMENT";

	           case XMLEvent.START_DOCUMENT:
	               return "DEBUT_DOCUMENT";

	           case XMLEvent.END_ELEMENT:
	               return "FIN_ELEMENT";

	           case XMLEvent.END_DOCUMENT:
	               return "FIN_DOCUMENT";

	           case XMLEvent.CHARACTERS:
	               return "CHARACTERES";

	           case XMLEvent.ATTRIBUTE:
	               return "ATTRIBUT";

	          case XMLEvent.COMMENT:
	               return "COMMENTAIRE";

	           case XMLEvent.PROCESSING_INSTRUCTION:
	               return "INSTRUCTION_PROCESSUS";

	           case XMLEvent.ENTITY_REFERENCE:
	               return "REFERENCE_ENTITE";

	           case XMLEvent.DTD:
	               return "DTD";

	           case XMLEvent.CDATA:
	               return "CDATA";

        	case XMLEvent.SPACE:
                  return "CDATA";
        }

        return "UNKNOWN_EVENT_TYPE";
    }

    private static void affichageTypeEvt(int eventType) {
        System.out.print("Type Evénément: (" + eventType + "):");
        System.out.println(getTypeEvt(eventType));
    }

    private static void affichageNom
    (
        XMLStreamReader xmlr,
        int eventType)
        {
        if (xmlr.hasName())
        {
            System.out.println("Le Nom: " + xmlr.getLocalName());
        }
    }

    private static void affichageText(XMLStreamReader xmlr)
       {
        if (xmlr.hasText())
        {
            System.out.println("Le Texte: " + xmlr.getText());
        }
    }

    private static void affichageDonneePI(XMLStreamReader xmlr)
    {
        if (xmlr.getEventType() == XMLEvent.PROCESSING_INSTRUCTION)
        {
			System.out.println(" Donnée PI = " + xmlr.getPIData());
            System.out.println(" Cible  PI = " + xmlr.getPITarget());

        }
    }

    private static void affichageAttributs(XMLStreamReader xmlr)
    {
        if (xmlr.getAttributeCount() > 0)
        {
            System.out.println("Les Attributs: ");

            int compteur = xmlr.getAttributeCount();

            for (int i = 0; i < compteur; i++)
            {
                QName nom = xmlr.getAttributeName(i);
                String namespace = xmlr.getAttributeNamespace(i);
                String type = xmlr.getAttributeType(i);
                String prefix = xmlr.getAttributePrefix(i);
                String valeur = xmlr.getAttributeValue(i);

                System.out.println("PREFIX-ATTRIBUT: " + prefix);
                System.out.println("NOM-ATTRIBUT:   " + nom.toString());
                System.out.println("TYPE-ATTRIBUT:  " + type);
                System.out.println("NAMESP-ATTRIBUT: " + namespace);
                System.out.println("VALEUR-ATTRIBUT:  " + valeur);

            }
        }
    }

    public boolean accept(XMLStreamReader reader)
    {
        if (!reader.isStartElement() && !reader.isEndElement())
        {
            return false;
        } else
        {
            return true;
        }
    }
    public static void main(String[] args) throws Exception
    {
        String nomFichier = "test.xml";

        XMLInputFactory xmlFact = null;

        xmlFact = XMLInputFactory.newInstance();
        xmlFact.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,Boolean.TRUE);
        xmlFact.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,Boolean.FALSE);
        xmlFact.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE);
        xmlFact.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);

        System.out.println("Le FACTORY: " + xmlFact);
        System.out.println("nomFichier = " + nomFichier);

        FileInputStream fis = new FileInputStream(nomFichier);

        XMLStreamReader xmlr = xmlFact.createFilteredReader(xmlFact.createXMLStreamReader(fis),new AnalyseXML());

        int eventType = xmlr.getEventType();
        affichageTypeEvt(eventType);

        while (xmlr.hasNext())
        {
                eventType = xmlr.next();
                affichageTypeEvt(eventType);
                affichageNom(xmlr, eventType);
                affichageText(xmlr);

                if (xmlr.isStartElement())
                {
                    affichageAttributs(xmlr);
                }
                affichageDonneePI(xmlr);
        }
    }

}

Leave a Reply

Your email address will not be published. Required fields are marked *