• 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

Cum sa transformam fisierul XML intr-o baza de date?

11
  • Publicat de Andrei Avădănei
  • în PHP · Tehnic
  • — 11 dec., 2009 at 9:31 pm

Zilele acestea, unul dintre cititorii WorldIT m-a intrebat cum ar putea imita o baza de date cu articole in care modalitatea de stocare a informatiilor este bazata pe fisiere XML.In speranta ca i-am inteles dorinta voi incerca sa scriu cateva randuri despre aceasta idee, axandu-ma doar pe adaugarea unui articol in fisierul XML, restul facandu-se intr-o modalitate similara.

In 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 XML este construirea unui obiect XML dupa ce acesta a fost citit, avand loc prelucrarile acestuia.

Pregatirea obiectului XML

<?php
	 include('xmlParser.php');
	 
	 //pregatim fisierul XML pentru procesare
         $xmlFile       = 'fisier.xml';
         $xmlContent    = file_get_contents($xmlFile);
         $xmlLength     = strlen($xmlContent); 
     
	 //generam obiectul XML
         $xmlParser     = new xmlParser($xmlContent,$xmlLength);
	 $xmlObject     = $xmlParser->XMLToObject(TRUE); 
?>

Structura fisierului XML

Am ales o structura minimala pentru a putea fi usor de inteles de cei care doresc sa implementeze un sistem similar.

<?xml version="1.0" encoding="ISO-8859-1"?>

<root>
  <info>
     <articleCount>
        1
    </articleCount>
  </info>
  <content>
     <article>
        <title>Titlu articol</title>
        <author>Autor</author>
        <date>data1</date>
        <artcontent>Textul articolului</artcontent>
     </article>
  </content>
</root>

Datorita functiilor oferite de clasa XML vor putea exista 2 metode de a adauga un articol nou in „baza de date”.

1. Cu un string ce este valid structurii noastre alese anterior.

In prima situatie, vom prelua obiectul anterior si vom crea un string XML valid, folosindu-ne de clasa xmlParser vom transforma ambele fisierele XML in obiecte si vom uni obiectul XML in obiectul mama, cel provenit din fisierul : fisier.xml (unde sunt stocate articolele).

<?php
	 include('xmlParser.php');
	 
	 //pregatim fisierul XML pentru procesare
     $xmlFile       = 'fisier.xml';
     $xmlContent    = file_get_contents($xmlFile);
     $xmlLength     = strlen($xmlContent); 
      
	 //generam obiectul XML
     $xmlParser     = new xmlParser($xmlContent,$xmlLength);
	 $xmlObject     = $xmlParser->XMLToObject(TRUE);
	 
	 //preluam numarul de articole
	 $articleCount  = $xmlParser->getNodeXML('root/info/articleCount/');
	 $articleCount  = (int)$articleCount['___value___'];
	 
	 //cream subxml-ul unui articol(VALID)
	 $article       = '<?xml version="1.0" encoding="ISO-8859-1"?>	 	
     <article>
	 	<title>Titlu articol</title>
        	<author>Autor</author>
        	<date>data</date>
        	<artContent>textul articolului</artContent>
	</article>';
		 
	//cream obiectul articolului
	$xmlArticle     = new xmlParser($article,strlen($article));
	$xmlArticleObj  = $xmlArticle->XMLToObject(TRUE);
	
	//adaugam obiectul articolului la obiectul mama
	$xmlParser->addNodeXML('root/content/','article',$xmlArticleObj['article']);
	
	//updatam article count si salvam noul fisier XML
	$xmlParser->editNodeXML('root/info/articleCount/',array('___value___'=>  (string)++$articleCount));
	$newXML = $xmlParser->ObjectToXML(TRUE);
	 
	$fh = fopen($xmlFile,'w');
	fwrite($fh,$newXML,strlen($newXML));
	fclose($fh);
?>

2. Creand fiecare nod cu ajutorul clasei XML.

Cea de-a doua metoda se va folosi de functiile aceleasi clase de a adauga noduri XML.Practic vom adauga pe rand fiecare nod, mai intai <article>, urmand <title>, <author>, <date>, <artContent>. 🙂

<?php
	 include('xmlParser.php');
	 
	 //pregatim fisierul XML pentru procesare
     $xmlFile       = 'fisier.xml';
     $xmlContent    = file_get_contents($xmlFile);
     $xmlLength     = strlen($xmlContent); 
      
	 //generam obiectul XML
     $xmlParser     = new xmlParser($xmlContent,$xmlLength);
	 $xmlObject     = $xmlParser->XMLToObject(TRUE);
	 
	 //preluam numarul de articole
	 $articleCount  = $xmlParser->getNodeXML('root/info/articleCount/');
	 $articleCount  = (int)$articleCount['___value___'];
	 
	//adaugam obiectul articolului la obiectul mama
	$xmlParser->addNodeXML('root/content/','article',array());
	
	$xmlParser->addNodeXML('root/content/article/','title',array('___value___' => 'Titlu articol'),$articleCount);
	$xmlParser->addNodeXML('root/content/article/','author',array('___value___' => 'Autor'),$articleCount);
	$xmlParser->addNodeXML('root/content/article/','date',array('___value___' => 'data'),$articleCount);
	$xmlParser->addNodeXML('root/content/article/','artcontent',array('___value___' => 'textul articolului'),$articleCount);
	
	//updatam article count si salvam noul fisier XML
	$xmlParser->editNodeXML('root/info/articleCount/',array('___value___'=>  (string)++$articleCount));
	$newXML = $xmlParser->ObjectToXML(TRUE);
	 
	$fh = fopen($xmlFile,'w');
	fwrite($fh,$newXML,strlen($newXML));
	fclose($fh);
?>

Sper ca v-a facut placere sa analizati acest cod si chiar m-as bucura sa vad dezvoltari ale acestuia pentru editare de „articole”, stergerea lor si diverse aplicatii pornind de la asta.Stiu, sunt optimist, insa daca va dori cineva sa invete ar trebui sa se chinuie putin. 🙂

Am uitat sa mentionez ca singurele probleme vor fi intalnite in momentul in care va trebuie sa lucrati cu atribute ale tagurilor,clasa nesuportand acest lucru.Si asa ca datorita acestui articol a suferit foarte multe modificari si retusuri pentru a indeplini cerintele minime acestui subiect.De asemenea, in curand acea clasa se apropie de versiunea finala, inca un salt si va fi gata si va putea fi folosita pe scara larga la orice tip de document XML de orice dimensiune. 🙂

Numai bine! 😀

Etichete: baza de datemysqlobiectPHPWorldITXMLxmlParser

— 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 Procesarea fisierelor XML in obiecte si lucrul cu acestea – PHP
  • Articolul următor WorldIT Question Time – voi ne ajutati

11 Comentarii

  1. Tweets that mention Cum sa transformam fisierul XML intr-o baza de date? | WorldIT -- Topsy.com spune:
    decembrie 11, 2009 la 10:06 pm

    […] This post was mentioned on Twitter by Avadanei Andrei, Avadanei Andrei. Avadanei Andrei said: Am terminat inca un articol interesant pentru #programatorii #php Cum sa transformam fisierul XML intr-o baza de date? http://bit.ly/538YUF […]

  2. razvan spune:
    decembrie 12, 2009 la 11:40 am

    Salut ,
    pentru o aplicatie in c# ce baza de date recomanzi?

  3. razvan spune:
    decembrie 12, 2009 la 11:57 am

    aplicatia sa fie portabila

  4. Avadanei Andrei spune:
    decembrie 12, 2009 la 5:16 pm

    Depinde ce informatii doresti sa stochezi.Eu am folosit in foarte multe aplicatii C# fisiere XML, clasele pentru procesarea lor fiind superb implementate.

    De asemenea poti folosi si baze de date ADO.NET sau orice fel de baze de date SQL portabile. 🙂

  5. razvan spune:
    decembrie 12, 2009 la 7:35 pm

    la Jurnal v2.3.5 Beta imi zici pls ce ai folosit?
    scz ca postez aici

  6. Andrey spune:
    decembrie 12, 2009 la 10:34 pm

    Razvan eu ti’as recomanda sa folosesti Microsoft Sql Server sau Mysql ambele fiind solutii, insa daca vrei portabilitate pe alte sisteme fara servere sql foloseste xml.

  7. Avadanei Andrei spune:
    decembrie 13, 2009 la 12:11 am

    Acolo am folosit fisiere XML, criptate folosind AES pe 256 biti.

  8. Paul spune:
    decembrie 13, 2009 la 10:03 am

    Multumesc pentru postarea acestui articol, ma ajutat foarte mult. 🙂

  9. razvan spune:
    decembrie 13, 2009 la 12:11 pm

    multumesc

  10. Dan spune:
    decembrie 21, 2010 la 7:16 am

    Andrei, bun articol. Am un fisier xml de 30GB , cum il incarc intr-o baza de date?

    • Andrei Avadanei spune:
      decembrie 21, 2010 la 12:44 pm

      Problema se pune putin diferit la situatii de genul. Nu am fost niciodata nevoit sa procesez fisiere de asemenea dimensiuni.

      Totusi, citirea si interpretarea ar trebui sa fie din mers, stocand cat mai putin in memorie. Practic trebuie sa citesti 8192 de biti (maximul de la fread de exemplu), daca reusesti sa procesezi xml-ul stergi informatia din spate. Aceasta varianta mult de modul in care este structurat fisierul tau. Poate exista si alte metode, dar pentru asta astept alte pareri a celor care s-au confruntat cu problema asta. 🙂


  • 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
  • mai 2022
    L Ma Mi J V S D
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031  
    « dec.    
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Tehnic
  • PHP
  • Cum sa transformam fisierul XML intr-o baza de date?
  • 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