<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.xml.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'function.xml-parse-into-struct.php',
    1 => 'xml_parse_into_struct',
    2 => 'Analizza i dati XML in una struttura array',
  ),
  'up' => 
  array (
    0 => 'ref.xml.php',
    1 => 'XML Parser Funzioni',
  ),
  'prev' => 
  array (
    0 => 'function.xml-parse.php',
    1 => 'xml_parse',
  ),
  'next' => 
  array (
    0 => 'function.xml-parser-create.php',
    1 => 'xml_parser_create',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'reference/xml/functions/xml-parse-into-struct.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.xml-parse-into-struct" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">xml_parse_into_struct</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">xml_parse_into_struct</span> &mdash; <span class="dc-title">Analizza i dati XML in una struttura array</span></p>

 </div>
 
 <div class="refsect1 description" id="refsect1-function.xml-parse-into-struct-description">
  <h3 class="title">Descrizione</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>xml_parse_into_struct</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> <code class="parameter">$parser</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$data</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter reference">&$values</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter reference">&$index</code><span class="initializer"> = ?</span></span><br>): <span class="type"><a href="language.types.integer.php" class="type int">int</a></span></div>

  <p class="para rdfs-comment">
   Questa funzione analizza una stringa XML in 2 strutture array parallele,
   una (<code class="parameter">index</code>) contiene i puntatori alla posizione dei
   valori opportuni nell&#039;array <code class="parameter">values</code>. Quest&#039;ultimi
   due parametri devono essere passati per riferimento.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.xml-parse-into-struct-parameters">
  <h3 class="title">Elenco dei parametri</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">parser</code></dt>
     <dd>
      <p class="para">
       Un riferimento al parser XML.
      </p>
     </dd>
    
    
     <dt><code class="parameter">data</code></dt>
     <dd>
      <p class="para">
       Una stringa contenente i dati XML.
      </p>
     </dd>
    
    
     <dt><code class="parameter">values</code></dt>
     <dd>
      <p class="para">
       Una array contenente i valori dei dati XML
      </p>
     </dd>
    
    
     <dt><code class="parameter">index</code></dt>
     <dd>
      <p class="para">
       Un array contenente i puntatori alla posizione degli opportuni valori in $values.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.xml-parse-into-struct-returnvalues">
  <h3 class="title">Valori restituiti</h3>
  <p class="para">
   <span class="function"><strong>xml_parse_into_struct()</strong></span> restituisce 0 per fallimento e 1 per
   successo. Questo non è lo stesso di <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> e <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, fare attenzione con
   gli operatori come ===.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.xml-parse-into-struct-examples">
  <h3 class="title">Esempi</h3>
  <p class="para">
   Nell&#039;esempio seguente si illustra la struttura interna degli
   array generati da questa funzione. Utilizziamo un semplice
   tag <code class="literal">note</code> incorporato all&#039;interno di un
   tag <code class="literal">para</code>, e quindi lo si analizzerà e stamperemo
   le strutture generate:
   <div class="example" id="example-1">
    <p><strong>Example #1 Esempio di uso <span class="function"><strong>xml_parse_into_struct()</strong></span></strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$simple </span><span style="color: #007700">= </span><span style="color: #DD0000">"&lt;para&gt;&lt;note&gt;simple note&lt;/note&gt;&lt;/para&gt;"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$p </span><span style="color: #007700">= </span><span style="color: #0000BB">xml_parser_create</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">xml_parse_into_struct</span><span style="color: #007700">(</span><span style="color: #0000BB">$p</span><span style="color: #007700">, </span><span style="color: #0000BB">$simple</span><span style="color: #007700">, </span><span style="color: #0000BB">$vals</span><span style="color: #007700">, </span><span style="color: #0000BB">$index</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">xml_parser_free</span><span style="color: #007700">(</span><span style="color: #0000BB">$p</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"Index array\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$index</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"\nVals array\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$vals</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>
     Eseguendo questo codice si avrà come output:
    </p></div>
    <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Index array
Array
(
    [PARA] =&gt; Array
        (
            [0] =&gt; 0
            [1] =&gt; 2
        )

    [NOTE] =&gt; Array
        (
            [0] =&gt; 1
        )

)

Vals array
Array
(
    [0] =&gt; Array
        (
            [tag] =&gt; PARA
            [type] =&gt; open
            [level] =&gt; 1
        )

    [1] =&gt; Array
        (
            [tag] =&gt; NOTE
            [type] =&gt; complete
            [level] =&gt; 2
            [value] =&gt; simple note
        )

    [2] =&gt; Array
        (
            [tag] =&gt; PARA
            [type] =&gt; close
            [level] =&gt; 1
        )

)</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   Un parsing event-driven (basato sulla libreria expat) può essere
   molto complicato se si deve trattare un documento XML complesso.
   Questa funzione non produce un oggetto in stile DOM, ma 
   genera una struttura che permette di essere gestita a modo di
   albero. Quindi si possono facilmente creare oggetti rappresentanti i dati
   del file XML. Si consideri il seguente file XML rappresentante
   un piccolo database di informazioni sugli aminoacidi.
   <div class="example" id="example-2">
    <p><strong>Example #2 moldb.xml - piccolo database di informazioni sulle molecole</strong></p>
    <div class="example-contents">
<div class="annotation-interactive xmlcode"><pre class="xmlcode">&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;moldb&gt;

  &lt;molecule&gt;
      &lt;name&gt;Alanine&lt;/name&gt;
      &lt;symbol&gt;ala&lt;/symbol&gt;
      &lt;code&gt;A&lt;/code&gt;
      &lt;type&gt;hydrophobic&lt;/type&gt;
  &lt;/molecule&gt;

  &lt;molecule&gt;
      &lt;name&gt;Lysine&lt;/name&gt;
      &lt;symbol&gt;lys&lt;/symbol&gt;
      &lt;code&gt;K&lt;/code&gt;
      &lt;type&gt;charged&lt;/type&gt;
  &lt;/molecule&gt;

&lt;/moldb&gt;</pre>
</div>
    </div>

   </div>
   Un codice per analizzare il documento e generare gli oggetti
   appropriati:
   <div class="example" id="example-3">
    <p><strong>Example #3 
     parsemoldb.php - analizza moldb.xml in un array di
     oggetti molecolari
    </strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">AminoAcid </span><span style="color: #007700">{<br />    var </span><span style="color: #0000BB">$name</span><span style="color: #007700">;  </span><span style="color: #FF8000">// nome aa<br />    </span><span style="color: #007700">var </span><span style="color: #0000BB">$symbol</span><span style="color: #007700">;    </span><span style="color: #FF8000">// simbolo di tre lettere<br />    </span><span style="color: #007700">var </span><span style="color: #0000BB">$code</span><span style="color: #007700">;  </span><span style="color: #FF8000">// codice di una lettera<br />    </span><span style="color: #007700">var </span><span style="color: #0000BB">$type</span><span style="color: #007700">;  </span><span style="color: #FF8000">// idrofobo, carico o neutro<br />    <br />    </span><span style="color: #007700">function </span><span style="color: #0000BB">AminoAcid </span><span style="color: #007700">(</span><span style="color: #0000BB">$aa</span><span style="color: #007700">) <br />    {<br />        foreach (</span><span style="color: #0000BB">$aa </span><span style="color: #007700">as </span><span style="color: #0000BB">$k</span><span style="color: #007700">=&gt;</span><span style="color: #0000BB">$v</span><span style="color: #007700">)<br />            </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$k </span><span style="color: #007700">= </span><span style="color: #0000BB">$aa</span><span style="color: #007700">[</span><span style="color: #0000BB">$k</span><span style="color: #007700">];<br />    }<br />}<br /><br />function </span><span style="color: #0000BB">readDatabase</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">) <br />{<br />    </span><span style="color: #FF8000">// legge il database XML di amminoacidi<br />    </span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">""</span><span style="color: #007700">, </span><span style="color: #0000BB">file</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">));<br />    </span><span style="color: #0000BB">$parser </span><span style="color: #007700">= </span><span style="color: #0000BB">xml_parser_create</span><span style="color: #007700">();<br />    </span><span style="color: #0000BB">xml_parser_set_option</span><span style="color: #007700">(</span><span style="color: #0000BB">$parser</span><span style="color: #007700">, </span><span style="color: #0000BB">XML_OPTION_CASE_FOLDING</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">xml_parser_set_option</span><span style="color: #007700">(</span><span style="color: #0000BB">$parser</span><span style="color: #007700">, </span><span style="color: #0000BB">XML_OPTION_SKIP_WHITE</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">xml_parse_into_struct</span><span style="color: #007700">(</span><span style="color: #0000BB">$parser</span><span style="color: #007700">, </span><span style="color: #0000BB">$data</span><span style="color: #007700">, </span><span style="color: #0000BB">$values</span><span style="color: #007700">, </span><span style="color: #0000BB">$tags</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">xml_parser_free</span><span style="color: #007700">(</span><span style="color: #0000BB">$parser</span><span style="color: #007700">);<br /><br />    </span><span style="color: #FF8000">// cicla attraverso le strutture<br />    </span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$tags </span><span style="color: #007700">as </span><span style="color: #0000BB">$key</span><span style="color: #007700">=&gt;</span><span style="color: #0000BB">$val</span><span style="color: #007700">) {<br />        if (</span><span style="color: #0000BB">$key </span><span style="color: #007700">== </span><span style="color: #DD0000">"molecule"</span><span style="color: #007700">) {<br />            </span><span style="color: #0000BB">$molranges </span><span style="color: #007700">= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;<br />            </span><span style="color: #FF8000">// ciascuna coppia di elementi contigua dell'array è<br />            // l'intervallo inferiore o superiore per la definizione di ciascuna molecola<br />            </span><span style="color: #007700">for (</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$i </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$molranges</span><span style="color: #007700">); </span><span style="color: #0000BB">$i</span><span style="color: #007700">+=</span><span style="color: #0000BB">2</span><span style="color: #007700">) {<br />                </span><span style="color: #0000BB">$offset </span><span style="color: #007700">= </span><span style="color: #0000BB">$molranges</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">] + </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />                </span><span style="color: #0000BB">$len </span><span style="color: #007700">= </span><span style="color: #0000BB">$molranges</span><span style="color: #007700">[</span><span style="color: #0000BB">$i </span><span style="color: #007700">+ </span><span style="color: #0000BB">1</span><span style="color: #007700">] - </span><span style="color: #0000BB">$offset</span><span style="color: #007700">;<br />                </span><span style="color: #0000BB">$tdb</span><span style="color: #007700">[] = </span><span style="color: #0000BB">parseMol</span><span style="color: #007700">(</span><span style="color: #0000BB">array_slice</span><span style="color: #007700">(</span><span style="color: #0000BB">$values</span><span style="color: #007700">, </span><span style="color: #0000BB">$offset</span><span style="color: #007700">, </span><span style="color: #0000BB">$len</span><span style="color: #007700">));<br />            }<br />        } else {<br />            continue;<br />        }<br />    }<br />    return </span><span style="color: #0000BB">$tdb</span><span style="color: #007700">;<br />}<br /><br />function </span><span style="color: #0000BB">parseMol</span><span style="color: #007700">(</span><span style="color: #0000BB">$mvalues</span><span style="color: #007700">) <br />{<br />    for (</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$i </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$mvalues</span><span style="color: #007700">); </span><span style="color: #0000BB">$i</span><span style="color: #007700">++) {<br />        </span><span style="color: #0000BB">$mol</span><span style="color: #007700">[</span><span style="color: #0000BB">$mvalues</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">][</span><span style="color: #DD0000">"tag"</span><span style="color: #007700">]] = </span><span style="color: #0000BB">$mvalues</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">][</span><span style="color: #DD0000">"value"</span><span style="color: #007700">];<br />    }<br />    return new </span><span style="color: #0000BB">AminoAcid</span><span style="color: #007700">(</span><span style="color: #0000BB">$mol</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">$db </span><span style="color: #007700">= </span><span style="color: #0000BB">readDatabase</span><span style="color: #007700">(</span><span style="color: #DD0000">"moldb.xml"</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"** Database degli oggetti Aminoacidi:\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   Dopo l&#039;esecuzione di <var class="filename">parsemoldb.php</var>, la variabile
   <var class="varname">$db</var> contiene un array di oggetti
   <span class="classname"><strong class="classname">AminoAcid</strong></span>, e ciò viene confermato
   dall&#039;output dello script:
   <div class="informalexample">
    <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">** Database di oggetti Aminoacidi:
Array
(
    [0] =&gt; aminoacid Object
        (
            [name] =&gt; Alanine
            [symbol] =&gt; ala
            [code] =&gt; A
            [type] =&gt; hydrophobic
        )

    [1] =&gt; aminoacid Object
        (
            [name] =&gt; Lysine
            [symbol] =&gt; lys
            [code] =&gt; K
            [type] =&gt; charged
        )

)</pre>
</div>
    </div>
   </div>
  </p>
 </div>


</div><?php manual_footer($setup); ?>