Le noeud DocumentType représentant la déclaration de type de document, peut livrer des informations sur le contenu de la DTD, soit les entités, les notations, les identificateurs PUBLIC ou/et SYSTEM et le nom de l'élément racine du document. L'objet DocumentType est délivré par la méthode getDocType() de l'objet Document. Evidemment si le document XML ne possède pas de déclaration de type de document, la valeur null sera retournée.

public class Parcours {
  public static void main(String[] args) {
    try {
      DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
      DocumentBuilder analyseur = fabrique.newDocumentBuilder();
      fabrique.setValidating(true);
      Document document = analyseur.parse("onu.xml");
      DocumentType dtd = document.getDoctype();
      afficherInfos(dtd, 0);
    }
    catch (IOException e) {
      e.printStackTrace();
    }
    catch (ParserConfigurationException e) {
      e.printStackTrace();
    }
    catch (SAXException e) {
      e.printStackTrace();
    }
  }
  public static void afficherInfos(Node noeud, int niv) {
    short type = noeud.getNodeType();
    String nom = noeud.getNodeName();
    String valeur = noeud.getNodeValue();
    System.out.print(nom + " (" + type + ") = '");
    if (valeur != null && !valeur.matches("^\\s+$"))
      System.out.print(valeur);
    System.out.println("'");

    if(type == Node.ENTITY_NODE) {
      Entity entite = (Entity)noeud;
      System.out.println("\tID Public : " + entite.getPublicId());
      System.out.println("\tID Système : " + entite.getSystemId());
      System.out.println("\tNom de notation : " + entite.getNotationName());
      System.out.println("\tEncodage d'entrée : " + entite.getInputEncoding());
      System.out.println("\tEncodage XML : " + entite.getPublicId());
      System.out.println("\tVersion XML : " + entite.getSystemId());
      System.out.println("\tTexte : " + entite.getTextContent());
    }
    else if(type == Node.NOTATION_NODE) {
      Entity entite = (Entity)noeud;
      System.out.println("\tID Public : " + entite.getPublicId());
      System.out.println("\tID Système : " + entite.getSystemId());
      System.out.println("\tTexte : " + entite.getTextContent());
    }
    else if(type == Node.DOCUMENT_TYPE_NODE) {
      DocumentType dtd = (DocumentType)noeud;
      NamedNodeMap entites = dtd.getEntities();
      NamedNodeMap notations = dtd.getNotations();
      System.out.println("\tID Public : " + dtd.getPublicId());
      System.out.println("\tID Système : " + dtd.getSystemId());
      System.out.println("\tTexte : " + dtd.getTextContent());

      for(int i = 0; i < notations.getLength(); i++) {
        Node n = notations.item(i);
        afficherInfos(n, 0);
      }
      for(int i = 0; i < entites.getLength(); i++) {
        Node n = entites.item(i);
        afficherInfos(n, 0);
      }
    }
  }
}

Les instructions de traitement sont composées d'une cible et d'un contenu, lesquels sont disponibles à partir des méthodes de l'objet ProcessingInstruction.

DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
DocumentBuilder analyseur = fabrique.newDocumentBuilder();
fabrique.setValidating(true);
Document document = analyseur.parse("logitheque.xml");
NodeList liste = document.getChildNodes();
for(int i = 0; i < liste.getLength(); i++){
  if(liste.item(i) instanceof ProcessingInstruction){
    ProcessingInstruction pi = (ProcessingInstruction)liste.item(i);
    System.out.print("Cible : " + pi.getTarget());
    System.out.print("Contenu : " + pi.getData());
  }
}