<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Parsejar_XML_en_el_cant%C3%B3_del_servidor_%28PHP%29</id>
	<title>Parsejar XML en el cantó del servidor (PHP) - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Parsejar_XML_en_el_cant%C3%B3_del_servidor_%28PHP%29"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Parsejar_XML_en_el_cant%C3%B3_del_servidor_(PHP)&amp;action=history"/>
	<updated>2026-08-30T03:15:14Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=Parsejar_XML_en_el_cant%C3%B3_del_servidor_(PHP)&amp;diff=257791&amp;oldid=prev</id>
		<title>Joan: /* icona ajax_wait.gif */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Parsejar_XML_en_el_cant%C3%B3_del_servidor_(PHP)&amp;diff=257791&amp;oldid=prev"/>
		<updated>2018-09-20T15:38:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;icona ajax_wait.gif&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Introducció=&lt;br /&gt;
En la pràctica de les receptes de cuina ([[Receptes_de_cuina_amb_Recipe_XML]]) que ja has fet o estàs a punt de fer, és Javascript (en el cantó del client) qui parseja el fitxer XML. És a dir, enviem el fitxer XML al client i allà el parsegem (per exemple, filtrar la informació dels ingredients i posar-los en una llista HTML). Una altra possibilitat és que sigui el codi PHP qui parsegi els ingredients del fitxer XML i formati una sortida en forma de llista HTML, i enviar ''només'' aquesta informació al client que ha fet la petició. Anem a veure-ho com es fa.&lt;br /&gt;
&lt;br /&gt;
=Referències=&lt;br /&gt;
*http://www.w3schools.com/php/php_xml_simplexml.asp&lt;br /&gt;
'''PHP SimpleXML''' no cal instal.lar-ho perquè forma part del nucli de PHP.&lt;br /&gt;
&lt;br /&gt;
Referència de '''PHP SimpleXML''':&lt;br /&gt;
*http://www.w3schools.com/php/php_ref_simplexml.asp&lt;br /&gt;
&lt;br /&gt;
=Parsejar XML amb PHP=&lt;br /&gt;
fitxer '''test.xml''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
&amp;lt;to&amp;gt;Tove&amp;lt;/to&amp;gt;&lt;br /&gt;
&amp;lt;from&amp;gt;Jani&amp;lt;/from&amp;gt;&lt;br /&gt;
&amp;lt;heading&amp;gt;Reminder&amp;lt;/heading&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;Don't forget me this weekend!&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/note&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Codi PHP, fitxer '''test.php''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$xml = simplexml_load_file(&amp;quot;test.xml&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
echo $xml-&amp;gt;getName() . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
foreach($xml-&amp;gt;children() as $child)&lt;br /&gt;
  {&lt;br /&gt;
  echo $child-&amp;gt;getName() . &amp;quot;: &amp;quot; . $child . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sortida per pantalla:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
note&lt;br /&gt;
to: Tove&lt;br /&gt;
from: Jani&lt;br /&gt;
heading: Reminder&lt;br /&gt;
body: Don't forget me this weekend! &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Receptes de cuina=&lt;br /&gt;
En el cas que ens ocupa, anem a veure com podem extreure la informació dels ingredients (i les quantitats) per a una recepta de cuinta escrita en el llenguatge ''Recipe XML''.&lt;br /&gt;
&lt;br /&gt;
Ara el codi '''index.htm''' és molt simple, perquè no hi ha res de parsejar el document XML. Senzillament hi ha una línia:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Receptes AJAX&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
function loadXMLDoc(recepta)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
var xmlhttp;&lt;br /&gt;
var txt,x,xx,i;&lt;br /&gt;
if (window.XMLHttpRequest)&lt;br /&gt;
  {// code for IE7+, Firefox, Chrome, Opera, Safari&lt;br /&gt;
  xmlhttp=new XMLHttpRequest();&lt;br /&gt;
  }&lt;br /&gt;
else&lt;br /&gt;
  {// code for IE6, IE5&lt;br /&gt;
  xmlhttp=new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
xmlhttp.onreadystatechange=function()&lt;br /&gt;
  {&lt;br /&gt;
  if (xmlhttp.readyState==4 &amp;amp;&amp;amp; xmlhttp.status==200)&lt;br /&gt;
    {&lt;br /&gt;
	    document.getElementById('info').innerHTML=xmlhttp.responseText;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
xmlhttp.open(&amp;quot;GET&amp;quot;,&amp;quot;processar_ingredients.php?recepta=&amp;quot;+recepta,true);&lt;br /&gt;
xmlhttp.send();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Receptes&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;formulari&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;frm_receptes&amp;quot; id=&amp;quot;formu&amp;quot; action=&amp;quot;#&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;select name=&amp;quot;recipes&amp;quot; onchange=&amp;quot;loadXMLDoc(this.value)&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;option value=&amp;quot;recipes/bean-and-ham.xml&amp;quot;&amp;gt;bean and ham&amp;lt;/option&amp;gt;&lt;br /&gt;
	&amp;lt;option value=&amp;quot;recipes/corn-chowder.xml&amp;quot;&amp;gt;corn chowder&amp;lt;/option&amp;gt;&lt;br /&gt;
	&amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;info&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
que ens està dient que printem en la capa allò que ens ha enviat el servidor. És el script ''processar_ingredients.php'' el que farà tota la feina.&lt;br /&gt;
&lt;br /&gt;
'''processar_ingredients.php''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$fitxerxml = $_GET[&amp;quot;recepta&amp;quot;];&lt;br /&gt;
echo &amp;quot;&amp;lt;h1&amp;gt;Ingredients $fitxerxml&amp;lt;/h1&amp;gt;&amp;quot;;&lt;br /&gt;
$xml = simplexml_load_file($fitxerxml);&lt;br /&gt;
//echo $xml-&amp;gt;getName() . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//per bolcar tota la informació:&lt;br /&gt;
//print_r($xml);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;;&lt;br /&gt;
foreach($xml-&amp;gt;ingredientlist-&amp;gt;ingredient as $ingredient){&lt;br /&gt;
	echo &amp;quot;&amp;lt;li&amp;gt;&amp;quot;;&lt;br /&gt;
	echo $ingredient-&amp;gt;fooditem;&lt;br /&gt;
	echo &amp;quot;&amp;amp;nbsp;($ingredient-&amp;gt;quantity)&amp;quot;;&lt;br /&gt;
	echo &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;;&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==icona ajax_wait.gif==&lt;br /&gt;
La idea és que abans d'arribar a l'estat 4 (''xmlhttp.readyState==4'') passem pels estats 1, 2 i 3, i aquests són els moments on podem mostrar la icona del ''wait'' típica del AJAX.&lt;br /&gt;
&lt;br /&gt;
Així doncs, senzillament farem un else:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	if (xmlhttp.readyState==4 &amp;amp;&amp;amp; xmlhttp.status==200)&lt;br /&gt;
	{&lt;br /&gt;
	    document.getElementById('info').innerHTML=xmlhttp.responseText;&lt;br /&gt;
	} else {&lt;br /&gt;
		document.getElementById('info').innerHTML=&amp;quot;&amp;lt;img src=\&amp;quot;img/ajax_wait.gif\&amp;quot; /&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En aquest cas també és interessant afegir la línia:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sleep ( 2 );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
al final de tot del script ''processar_ingredients.php'', per simular que el script php té molta càrrega de treball.&lt;br /&gt;
&lt;br /&gt;
{{Autor}}, febrer 2019&lt;br /&gt;
[[Categoria: Institut Jaume Balmes]]&lt;br /&gt;
[[Categoria: Assignatura DAW-M06-WEC]]&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>