Genergowanie XML w php - PHP
Mouser Electronics Poland   Przedstawicielstwo Handlowe Paweł Rutkowski   Amper.pl sp. z o.o.  

Energetyka, Automatyka przemysłowa, Elektrotechnika

Dodaj firmę Ogłoszenia Poleć znajomemu Dodaj artykuł Newsletter RSS
strona główna GRUPY PHP Genergowanie XML w php
REKLAMA
REKLAMA

Genergowanie XML w php

Awatar użytkownika
AnnaTopczewska

Cześć,

Mam podstawową wiedzę z php i chcę ją rozwinąć o generowanie xml'a na podstawie zawartości bazy kodem php. czy ktoś mógłby mnie poinstruować jak się to robi?

Najlepiej krok po kroku:

Łączę się z bazą pobieram jeden rekord który spełnia moje wymagania mam go pod zmienną

$wiersz;

$wiersz[0] to id itd....

robię strukturę

<rekord>

<id>$wiersz[0]</id>

<nazwa>$wiersz[1]</nazwa>

...

</rekord>

nie wiem teraz jak to zapisać do pliku xml, jak go utworzyć i jak za każdym razem dopisać kolejne wiersze, próbowałam w Google ale trochę chaotycznie to tam wygląda. prosiłabym o pomoc krok po kroku

Awatar użytkownika
Artur Kulikowski

Witaj,

Samo generowanie xml jest bardzo proste Tworzysz skrypt postaci (wyjaśnienia zostały zakomentowane więc do ćwiczeń możesz skopiować całą zawartość<?php...?> pamiętaj o uzupełnieniu danych do połączenia z bazą i skorygowaniu pobieranych wartości:

 

 

<?php

//Tworzysz nagłówek

// Generowanie danych XML

header('Content-type: application/xml; charset=utf-8');

header("Expires: 0");

header("Cache-Control: no-cache, must-revalidate");

header("Pragma: no-cache");

//Nawiązujesz połączenie z DB

$conn = mysql_connect('adres', 'login', 'pwd') or  die('Could not connect !<br />Please contact the site\'s administrator.');

mysql_query('set names utf8');  

$db = mysql_select_db('nazwa_bazy',$conn) or  die('Could not connect to database !<br />Please contact the site\'s administrator. kom2');

//Zaczynasz tworzyć XMLA

//zaczynasz plik xml i ustawiasz kodowanie na utf-8

echo '<?xml version="1.0" encoding="utf-8" ?>'."\n";

//zaczynasz dodawanie treści standardowymi komendami echo

echo'<rekordy>'."\n";//początek jednego rekordu

echo'   <utworzono>'.time().'</utworzono>'."\n";

$ii = 0; // to licznik inkrementujący licznik pozycji w XML

$zapytanie = mysql_query("Twoje_zpaytanie");

/*polecam do ćwiczeń zmianę sposobu odwoływania się do wyników zapytania z $wiersz[0] na np $wiersz->id łatwiej jest nimi operować i łatwiej odwołać się do konkretnej wartości i nei trzeba liczyć kolumn w mysql*/

while($rekord = mysql_fetch_object($zapytanie)) 

{

    echo'   <rekord id="'.$ii.'">'."\n";//wyświetlenie inkrementowanego id pozycji

    echo'   <id>'.$rekord->id.'</id>'."\n";//w ramkach <id> wpisuje wartość id rekordu pozostałe pozycje anlogicznie

    echo'   <post_created>'.$rekord->created.'</post_created>'."\n";

    echo'   <post_name><![CDATA['.strip_tags($rekord->name,'<a>').']]></post_name>'."\n";

    echo'   <post_data ><![CDATA['.strip_tags($rekord->search_data,'<a>') .']]></post_data >'."\n"

    echo' </rekord>'."\n";

    $ii++;

}

echo'</rekordy>'."\n";//zamyka dane rekordu

?>

 

 

strip_tags obcina tagi html i zezwala tylko na te które zdefiniujesz :

http://php.net/manual/en/function.strip-tags.php

 

znaczniki <![CDATA[

one pozwalają na przechowywanie danych niedozwolonych w XML typu '>' czy '&', czego jest duzo w kodzie np javascript, wszystko co jest w CDATA nie jest parsowane przez parser XML

http://forum.php.pl/lofiversion/index.php/t76653.html

 

Tyle pamiętam dawno nie korzystałem i nie gwarantuję, że gdzieś jakiś błąd się nie wkradł. Proszę o uzupełnienie,poprawienie przez kogoś z większym doświadczeniem z XML'ami.

 

Awatar użytkownika
AnnaTopczewska

Dzięki za szybką, odpowiedź.

Coś mi zaczęło wychodzić. Przynajmniej pojedyncze rekordy mi wczytuje.

Brakuje mi tylko zapisu tej zawartości do pliku .XML

Awatar użytkownika
Artur Kulikowski

Tak na szybko napiszę:

http://teleinfo.pb.edu.pl/~krashan/files/tech_int_3_wyklad_4.pdf

Plik pomocniczy do pracowni Technologie internetowe 3. Mam nadzieję, że autor nie ma nic przeciwko podaniu linku. ( Przy okazji pozdrawiam byłego prowadzącego zajęcia z TI3 :) )

zapis do pliku - strona 7

otwieranie i zamykanie pliku - str 4,5

w skrócie:

1.

otwierasz plik (najpierw go tam wrzuć, nawet pusty) fopen z parametrem 'w' - nadpisywanie starej zawartości pliku po to aby się nie rozrastał w nieskończoność a były w nim tylko aktualne dane.

if ($plik = fopen('test.xml', 'w')){ dane zapisywane do pliku}

2.

w danych dodajesz nagłówek

fwrite($plik,'<?xml version="1.0" encoding="utf-8" ?>'."\n");

3.

zamieniasz wszystkie echo 'tekst'; na fwrite($plik,'tekst'); co spowoduje dopisywanie w otworzonym pliku kolejnych wierszy, któe wcześniej były wyświetlane w przeglądarce

4.

po dodaniu wszystkich wartości zamykasz plik fclose($plik);

 

pzdr.

W razie potrzeby rozpiszę przykład.

Awatar użytkownika
AnnaTopczewska

Dziękuje, przykład jest już zbędny ze wszystkim sobie poradziłam.

Pozdrawiam

Awatar użytkownika
AnnaTopczewska

Witam ponownie,

"Po drodze" wyszedł jeszcze jeden mały problem

codziennie w katalogu głównym serwera powstaje plik xml.php bo tak nazywa się mój skrypt raz o rozmiarze 1b teraz 9b oba puste. Skrypt jest wykonywany automatycznie przez serwer.

Dodam, że nie mam w nich żadnych komend echo, po których coś powinno być wyświetlane

Awatar użytkownika
Artur Kulikowski

Witaj,

zadaj to pytanie we właściwej grupie, jeśli serwer działa pod Linux'em to zapraszam

tu -> Serwery dedykowane LINUX

odpowiedz
REKLAMA
Nasze serwisy:
elektrykapradnietyka.com
przegladelektryczny.pl
rynekelektroniki.pl
automatykairobotyka.pl
budowainfo.pl