• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Procesarea fisierelor XML in obiecte si lucrul cu acestea – PHP

7
  • Publicat de Andrei Avădănei
  • în Fără categorie
  • — 11 dec., 2009 at 7:20 pm

xml_at_work[1]
Update : 11 decembrie 2009
Am promis o serie de articole destul de interesante dupa parerea mea. Acesta este al treilea articol din aceasta serie care il voi publica in urmatoarea perioada. Am inceput sa lucrez la ultima versiune si cea publica a sistemului de securitate ce va include si analiza fisierelor , anti RCE/CSRF dar pastrez linistea pana una alta.Anumite parti ce mi se par interesante le voi publica si le voi explica, pentru ca sunt sigur ca vor prezenta interes unora in viitor.

Ok , sa revenim. Pentru inceput , vom considera ca sunteti familiarizati cu XML si tot ce tine de acesta.In PHP nu prea exista functii care sa creeze obiecte usor de folosit pentru a returna valorilor,argumentele pastrate in acestea.

Clasa creata de mine suporta aproximativ toate operatiile de baza ce pot fi efectuate asupra unui fisier XML.Aceasta are ca dependenta majora clasa cException, studiata si prezentata in urma cu cateva zile pe blog.

Structura clasei :

  /**
 * @name        : xmlParser
 * @description : The XML Parser Class. Parse regular xml file content into array where ___value___ key represents
                      a node value and ___atrr___ key represents the attribute of specific node.
                      This class use cException class for exceptions handling.
 * @author      : Avadanei Andrei
 * @copyright   : 2009 - Avadanei Andrei
 **/
  class xmlParser
  {
      private $xmlObject        = array();         /* The Parsed XML Object */
      private $xmlContent      = "";                 /* The XML File Content   */
      private $xmlLength       = 0;                  /* The XML File Length     */

      public function xmlParser($xmlContent,$xmlLength);
      public function __construct($xmlContent,$xmlLength);
      public function getNodeXML($tree = '');
      public function addNodeXML($tree = '',$xmlNewNode = '', $addXML = '',$addID=-1);
      public function editNodeXML($tree = '',$editXML = '',$editID = -1);
      public function validateObject($object);
      public function removeNodeXML($tree = '',$editID = -1);
      public function ObjectToXML($returnXML = TRUE);
      private function buildObjectToXML($nodes,$push = '');
      public function XMLToObject($returnXML = TRUE);
  }

Observam ca avem posibilitatea de a parsa un fisier XML(continutul acestuia) intr-un obiect XML. De asemenea clasa suporta si operatia inversa. Avem posibilitatea de a elimina un nod si toate subnodurile sale,precum si de a edita sau adauga un nod nou(un string sau un obiect in cazul in care dorim sa adaugam un „sub-obiect”).Avem posibilitatea de a valida un nod si toate subnodurile sale pentru a verifica daca este corect din punct de vedere obiectual fata de structura aleasa de mine.Operatiile asupra atributelor le-am omis,asta putandu-se face manual. Daca voi vedea macar 2-3 persoane dornice sa updatez clasa o voi face.

Structura obiectului XML :

  [nod]
    array(
           [___attr___] array([atribut 1],[attribut 2] ... [attribut n]);
           [subnod] array([___value___],[___attr___]);
           [subnod]
           .......
           [subnod]
         );

Un nod ce are elementul [___value___] nu poate avea subnoduri, insa unul ce are elementul [___attr___] poate avea subnoduri.Toate subnodurile au „structura” nodului dat in exemplul de mai sus.De asemenea elementele [___value___] si [___attr___] pot lipsi din structura obiectului XML la un anumit nod.

Exemple de folosire :

<?php
include('xmlParser.php');
 $xml  = '<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<note>
 <to atttr="test" ab="adsgds"><attr>ss</attr><test>Tove</test></to>
 <from>Jaani</from>
 <from>Jaani2</from>
 <heading>Reminder</heading>

</note>

';
$xmlL = strlen($xml);
$xmlParser = new xmlParser($xml,$xmlL);
$siteXML         = $xmlParser->XMLToObject(TRUE);
echo $xmlParser->validateObject($siteXML);
print_r($siteXML);
$xmlParser->removeNodeXML('note/to/attr/');
echo $xmlParser->ObjectToXML(TRUE);
$xmlParser->addNodeXML('note/to/','attr',array('___value___'=>'valoareeee2'));
$xmlParser->editNodeXML('note/from/',array('___value___'=>'valoareeee2'),0);
echo $xmlParser->ObjectToXML(TRUE);
?>

Puteti descarca clasa de mai jos cu exemplele de mai sus , toate functiile avand explicatii complete despre modul in care ar trebui folosite functiile. Atasamentul de mai jos, in cazul exemplelor are inclusa si clasa cException.
Descarca Clasa xmlParser si exemple de folosire

Update

Au fost aduse imbunatatiri acestei clase.Cea mai importanta modificarea a fost posibilitatea de acum incolo de a lucra cu noduri cu acelasi nume.Au fost aduse si alte imbunatatiri minore si au fost fixate cateva bug-uri.Noua versiune o puteti descarca de la aceeasi adresa de mai sus.De asemenea functiile addNodeXML(),editNodeXML() si removeNodeXML() si-au modificat parametrii.Ii puteti vedea mai sus. 🙂

Etichete: Avadanei AndreiclasaobiectPHPTehnicXML

— Andrei Avădănei a scris 1246 articole

Andrei scrie pe worldit.info din vara lui 2011. Este fondatorul Asociatiei Centrul de Cercetare in Securitate Informatica din Romania - CCSIR si coordoneaza DefCamp, cea mai importanta conferinta de securitate informatica & hacking din Europa Centrala si de Est. Andrei ofera in cadrul Bit Sentinel servicii de securitate informatica, penetration testing, security management, recuperarea de pe urma unui atac cibernetic, training-uri si workshop-uri.

  • Articolul anterior Kaspersky si Nasa au probleme de securitate, romanii atrag inca o data atentia
  • Articolul următor Cum sa transformam fisierul XML intr-o baza de date?

7 Comentarii

  1. Cum sa transformam fisierul XML intr-o baza de date? | WorldIT spune:
    decembrie 11, 2009 la 9:31 pm

    […] urma cu ceva timp am prezentat o implementare a unei clase destul de cuprinzatoare creata pentru usurarea procesarii fisierelor XML, aducandu-le la o forma obiectuala.Cea mai eficienta modalitate de a prelucra integral un document […]

  2. Ionut G. Stan spune:
    decembrie 14, 2009 la 4:44 pm

    Salut,

    Vroiam sa te intreb, fara nicio rautate ascunsa, de ce ar vrea un anumit developer sa foloseasca clasa asta de procesare XML in locul celor built-in din PHP (SimpleXML, DOMDocument, DOMXPath)? Ce avantaje ar aduce?

  3. Avadanei Andrei spune:
    decembrie 14, 2009 la 4:52 pm

    Salut,
    Stai linistit inteleg rostul intrebarii si eram constient ca ea exista la cineva,doar asteptam sa vad cine va indrazni sa o puna.

    Iti voi raspunde la intrebare incercand sa iti exemplific ideea pe care ma bazez cand vin initial cu solutii personale si ma reintorc cu articole in care prezint cele deja existente.

    In ziua de azi, utilizatorul se bazeaza tot mai mult pe obiecte,clase si functii deja facute.Imediat cand acestea lipsesc se simte ca si cum nu ar avea membrele.Prin astfel de solutii eu arat ideea de baza ce sta in spatele claselor prezentate. Nu spun ca ar fi perfecte,sau ca ar fi macar aproape de perfectiune, ci, din contra, sunt constient ca prezinta extrem de multe bug-uri, poate unele la care nu ma astept.

    DAR, acest lucru nu stiu daca conteaza atunci cand inveti principiul ce sta la baza.Un alt avantaj al acestor prezentari personale consta in faptul ca poate fi si un exercitiu pentru mine in timp ce scriu articolul si pentru cel care il citeste,fiind nevoit sa inteleaga cu adevarat cum gandesc daca chiar vrea sa invete! 😀

    Sper ca asta ti-a raspuns la intrebare!

  4. Ionut G. Stan spune:
    decembrie 14, 2009 la 5:01 pm

    OK, am inteles. Daca scopul este unul (auto-)didactic, nu am nimic impotriva sa se faca asa ceva. Sincer, inteleg problema cu oamenii care asteapa ca totul sa le fie dat pe tava de PHP si am si eu atitudinea Do It Yourself, tocmai pentru a invata lucruri noi. In privinta XML insa, consider ca implementarea DOM din PHP este una destul de buna, de aici si comentariul meu. E adevarat ca multi se plang de API, insa eu cred ca e OK. Ceva mai buna fiind doar o abstractie gen jQuery.

    Apropo, bafta cu blog-ul, e o ocazie foarte buna sa inveti atunci cand incerci sa explici altora 🙂

  5. Avadanei Andrei spune:
    decembrie 14, 2009 la 5:08 pm

    Multumesc! 🙂

    Da, se poate spune ca am avut ocazii cand chiar am avut de invatat de pe urma a ce scriu.Desi stiam acele lucruri, le stiam evaziv sau teoretic, iar scriind articolele am fost nevoit sa ma documentez ceva mai cu simt de raspundere pentru a oferi informatii reale cititorilor. 😀

    Pana acum am folosit doar DOM din PHP, restul mi s-au parut inutile, acesta avand si o abordare asemenatoare cu cea din Javascript, care imi este si mai familiara. 🙂

    Numai bine!

  6. Corina spune:
    noiembrie 24, 2010 la 8:18 pm

    Salut! Mi se pare foarte interesanta aceasta modalitate propusa de tine dar as vrea sa stiu cum pot face sa includ un fisier xml extern. Adica sa nu fie nevoie sa scriu textul fisierului xml in interiorul php shi toata modificarile care le fac sa fie inregistrate in xml extern.

  7. Andrei Avadanei spune:
    noiembrie 24, 2010 la 8:21 pm

    Buna Corina si bun venit pe la noi! 🙂

    Rezolvarea la problema ta e foarte simpla si anume implica stocarea informatiilor in fisiere structurate in format XML. Asta inseamna ca nu ramane decat sa deschizi un fisier, sa citesti continutul din el si sa aplici acelasi principiu. Poti citi despre fisiere aici.


  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    [wp_rss_retriever url="https://rohacked.bit-sentinel.com/feed/" excerpt="none" items="5" read_more="false" new_window="true" thumbnail="false" cache="0"] RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • iunie 2022
    L Ma Mi J V S D
     12345
    6789101112
    13141516171819
    20212223242526
    27282930  
    « dec.    
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Procesarea fisierelor XML in obiecte si lucrul cu acestea – PHP
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons