<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
  "/usr/share/xml/docbook/schema/dtd/4.4/docbookx.dtd">
<article>
  <articleinfo>
    <title>TD-9 : DOM</title>
    <author>
      <firstname>Benoît Valiron</firstname>
      <surname>Jean-Baptiste Faddoul</surname>
    </author>
    <abstract>
    <title />
    <para>
      On va reprendre les documents XML du TD 7. On rappelle que les deux faces de la feuille jointe comportent deux documents différents, intitulés Document 1 et Document 2.
    </para>
    </abstract>
  </articleinfo>

  <sect1>
  <title>Lecture d'expressions DOM</title>
  <subtitle>(Voir le document 1 feuille jointe)</subtitle>
    <para>
      Dans le document XML, Qu'est-ce que représentent les expressionss DOM suivantes ? Donnez le type de l'objet retourné. Donnez les lignes correspondantes et/ou les morceaux de code. On part du principe que la variable <code>doc</code> de type <code>Document</code> contient l'arbre DOM.
      <orderedlist>
       <listitem>
          <para>
            <code>doc.getChildNodes().item(0).hasAttributes()</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().item(0)</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().
            item(1).hasAttributes()</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().
            item(1).getAttributes().getLength()</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().
            item(1).getAttributes().item(0)</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().
            item(1).getChildNodes().item(0)</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().
            item(1).getChildNodes().item(0).getTextContent()</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().
            item(1).getChildNodes().item(1)</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().
            item(1).getChildNodes().item(1).getTextContent()</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().
            item(1).getChildNodes().item(2)</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().
            item(1).getChildNodes().item(2).getTextContent()</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>doc.getChildNodes().item(0).getChildNodes().
            item(3).getChildNodes().item(1)</code>
          </para>
        </listitem>
        <listitem>
          <para>
            <code>((Element) doc.getElementsByTagName("acteur").item(1)).
            getElementsByTagName("p").item(1).getTextContent()</code>
          </para>
        </listitem>
      </orderedlist>
    </para>
  </sect1>

  <sect1>
    <title>Écriture d'expressions DOM</title>
    <subtitle>(Utilisez le document 2 feuille jointe)</subtitle>
    <para>
      Dans le document XML, donnez des expressions DOM (ou petit bout de code java) qui détermine ce qui est demandé. Utilisez la variable <code>doc</code> de type <code>Document</code> pour l'arbre DOM.
    <orderedlist>
      <listitem>
        <para>
          le nombre de films disponibles ; <!-- doc.getElementsByTagName("film").getLength() -->
        </para>
      </listitem>
      <listitem>
        <para>
          le troisième acteur du deuxième film ; <!-- doc.getElementsByTagName("film").item(1).getChildNodes().item(7).getChildNodes().item(5)
          ou
          ((Element) doc.getElementsByTagName("film").item(1)).getElementsByTagName("acteur").item(2) rends ce qu'on veut.
           -->
        </para>
      </listitem>
      <listitem>
        <para>
          les titres des films dont la fiche est en anglais ;
        </para>
      </listitem>
      <listitem>
        <para>
          le nom du personnage dont l'identifiant est lukemonfils ;
        </para>
      </listitem>
      <listitem>
        <para>
          le titre des films sortis en 1981 (avec un morceau de code java. Utilisez <code>System.out.println</code> pour les afficher)
        </para> <!--
        		for ( int i = 0; i < n.getLength(); ++i ) {
		   Element e = (Element) n.item(i);
		   if (e.getAttribute("lang").equals("en") )
		      System.out.println(e.getElementsByTagName("titre").item(0).getTextContent());
		}
        -->
      </listitem>
      <listitem>
        <para>
          le nombre de références faites au personnage dont
          l'identifiant est indy ;
        </para>
      </listitem>
      <listitem>
        <para>
          les films sans acteur ;
        </para>
      </listitem>
    </orderedlist>
    </para>
  </sect1>


  <sect1>
    <title>Modification d'arbre DOM</title>
    <subtitle>(Utilisez encore le document 2 feuille jointe)</subtitle>
    <para>
    Dans le document XML, donnez des expressions DOM pour faire ce qui est demandé. L'arbre DOM se trouve dans la variable <code>doc</code> de type <code>Document</code>.
    <orderedlist>
      <listitem>
        <para>
          Ajoutez un acteur au deuxième film : "Phil Brown" joue le personnage "Uncle Owen". On lui donne l'id <code>"owen"</code>.
        </para>
      </listitem>
      <listitem>
        <para>
          Supprimez "Harrison Ford" de la liste des acteurs de la guerre des étoiles, et changez le titre du film en "Star Wars".
        </para>
      </listitem>
      <listitem>
        <para>
          Rajoutez un film à la liste. On ajoutera le titre "Marie et Max", le réalisateur "Adam Elliot", et la date "2009".
        </para>
      </listitem>
    </orderedlist>
    </para>
  </sect1>

</article>

