Sujet : Hoa_XML

Salut tous le monde smile

Je souhaite utiliser Hoa en temps que library pour des usages ponctuel tel que bénéficier de la puissance de la lecture de fichier XML


Je ne sais pas quel classe instancier ^^ je sais c'est con mais j'ai pas compris comment faire marcher tout ca ^^


J'ai cru comprend qu'il fallait ouvrir un Hoa_Stream sur mon fichier mais heu ^^ la je déconnecte xD


Un coup de pouce serait le bienvenue et vu le vide intersidéral de la doc sur le paquet Hoa_XML on me répondra pas RTFM cool


Merci d'avance

Apprend Hoa et est heureux smile

2

Re : Hoa_XML

J'ai trouver ca :

        $file = new Hoa_File_Read('x.xml', Hoa_File::MODE_READ);


        $xml = new Hoa_Xml_Read($file);
        foreach ($xml as $k=>$o){
            print_r($k);
            print_r($o);
        }

Vous en pensez quoi ?

Dernière fois dit par thehawk (22 Jan. 2011 17:36)

Apprend Hoa et est heureux smile

3

Re : Hoa_XML

Hey smile,

Tu es le roi pour demander les informations alors que la documentation est en cours d'écriture toi hein wink. Hoa 1.0 va bientôt sortir et la documentation va être totalement refaite exprès mais je vais t'expliquer très rapidement.

Hoa propose un système de flux totalement unifié. Hoa_Stream s'occupe de cette laborieuse tâche. Dans Hoa_Stream, on trouve les interfaces Hoa_Stream_Interface_*, dont Hoa_Stream_Interface_In et Hoa_Stream_Interface_Out, respectivement pour des flux de lecture ou d'écriture.

On trouve alors tout plein de flux primitifs, comme Hoa_File, Hoa_Socket etc.
Pour le premier, on trouve les enfants Hoa_File_Read, Hoa_File_Write et Hoa_File_ReadWrite par exemple (on en trouve beaucoup d'autres mais j'ai dit que je faisais rapidement wink).

Enfin, on trouve une autre catégorie de flux, les flux dits composites, comme Hoa_Xml. Tiens, ça devient très intéressant wink.
Pourquoi un flux composite ? Hoa_Xml permet de lire des documents XML, de les manipuler comme des flux, on trouve Hoa_Xml_Read, Hoa_Xml_Write et Hoa_Xml_ReadWrite par exemple. Sauf que le document XML, il vient d'où ? D'un fichier ? D'une socket ? On comprend que Hoa_Xml a besoin de travailler sur un flux, il a besoin d'être composé d'un flux, c'est donc un flux composite.

C'est pourquoi on va commencer par ouvrir un fichier en lecture seule par exemple :

import('File.Read') and load();
$file = new Hoa_File_Read('Foobar.xml');

Ensuite, on veut interpréter le contenu du fichier comme étant de l'XML, alors :

import('Xml.Read') and load();
$xml = new Hoa_Xml_Read($file);

Et le tour est joué.

Sauf que, Hoa_Xml, en plus d'être un flux composite, est un flux structurel. C'est à dire qu'il manipule une structure, comme un arbre. Il implémente donc l'interface Hoa_Stream_Interface_Structural. On trouve alors des méthodes comme selectChildElements(). Tu peux alors faire :

foreach($xml->selectChildElements() as $child)
    var_dump($child->getName());

Tous les éléments XML héritent de Hoa_Xml_Element_Basic, où tu as des méthodes comme readAttribute(), readAttributes(), readAttributeAsList() ou ce genre de chose. Je t'invite à regarder le code, il est clair et facile à lire, ainsi que le code des interfaces de flux.
Une chose en plus, si tu utilises Hoa_Xml_Read, alors les éléments XML seront du type Hoa_Xml_Element_Read (qui étend Hoa_Xml_Element_Basic), donc les élément sont eux-mêmes des flux ! Imagines faire :

$element->readAll()
// ou
$element->readInteger()

Ça devient intéressant smile.

Est-ce déjà un brin plus clair ?
L'avantage, c'est que les méthodes sur les flux sont strictement le mêmes quelque soit le flux que tu manipules. Ainsi, tu peux donner une socket à Hoa_Xml, ce sera pareil. Si tu manipules Hoa_Json, Hoa_File, Hoa_Socket, Hoa_Websocket, Hoa_Xml ou je ne sais quoi, ce sera toujours les mêmes interfaces donc les même méthodes. Tu peux interchanger tes flux entre eux, le code fonctionnera toujours.
T'en penses quoi ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Hoa_XML

Que je suis pressé d'avoir un Hoa 1.0 avec la doc.......

Heu c'est pas mon post  désolé big_smile

5

Re : Hoa_XML

Ça te semble sympa ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Hoa_XML

Très bien

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

7

Re : Hoa_XML

smile

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

8

Re : Hoa_XML

Merci de tes explications , mais je reviens encore faire mon lourd smile

Je pense qu'il y a un bug dans ton code en effet quand je fait :

$file = new Hoa_File_ReadWrite('x.xml');
$xml = new Hoa_Xml_ReadWrite($file);


print_r($xml->readArray());
$xml->writeArray($xml->readArray());

avec x.xml :

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Document   : x.xml
    Created on : 22 janvier 2011, 16:57
    Author     : Julien
    Description:
        Purpose of the document follows.
-->
<root xmlns="http://www.w3.org/HTML/1998/html4">
    <columns>
    <column name="id"/>
    <column name="name"/>
    </columns>
    <tuples>
    <tuple id="5">
        <row cols="id">Ola</row>
        <row cols="name">TEST</row>
    </tuple>
    <tuple id="6">
        <row cols="id">Ola</row>
        <row cols="name">TEST</row>
    </tuple>
    </tuples>
</root>

L'algorithme me sort :

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Document   : x.xml
    Created on : 22 janvier 2011, 16:57
    Author     : Julien
    Description:
        Purpose of the document follows.
-->
<root xmlns="http://www.w3.org/HTML/1998/html4">
    <columns>
    <column name="id"/>
    <column name="name"/>
    </columns>
    <tuples>
    <tuple id="5">
        <row cols="id">OralB</row>
        <row cols="name">TEST</row>
    </tuple>
    <tuple id="6">
        <row cols="id">Ola</row>
        <row cols="name">TEST</row>
    </tuple>
    </tuples>
<columns>
    
    
    </columns><tuples>
    
    
    </tuples></root>

Ou alors j'ai fait une boulette quelque part ^^ mais bon s'il faut j'attendrais la V1.0 de la doc ^^ , j'ai tenter sans indentation le probleme est identique j'ai toujours les balises fantomes :s

Merci d'avance smilebig_smile

Dernière fois dit par thehawk (24 Jan. 2011 14:41)

Apprend Hoa et est heureux smile

9

Re : Hoa_XML

Je vais regarder ça cette semaine.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

10

Re : Hoa_XML

Oui. Je vois ce qui ne marche pas. Hoa_Xml est encore en développement car je l'améliore à cause/grâce à Hoa_Xyl. Quand j'ai écrit writeArray(), je n'avais pas encore toutes les interfaces qu'il y a maintenant, ni toutes les méthodes pour simplifier l'algorithme. Je vois où est le soucis, je corrige ça dès que j'ai 2mn (mais je suis en pleine période d'examens cette semaine tongue).
Forcément, comme le paquetage n'est pas fini, je n'ai pas lancé ma suite de tests, donc pas de soucis si c'est buggy.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »