konto usunięte

Temat: odczyt XML w PHP

Witam,
mam taki plik XML:
<SerwerSMS login="Moj_login">
<SM id="1" numer="a1" wartosc="wartosc 1" stan="ok" godzina="2008-09-15 18:30:18"/>
<SM id="2" numer="a2" wartosc="wartosc 2" stan="bad" godzina="2008-09-15 18:23:23"/>
</SerwerSMS>

i chciałbym to przypisać do pojedynczych zmiennych (tak żebym mógł uzupełniać zdania tymi zmiennymi).
Próbowałem zrobić coś takiego:

<?php

function tag_start($parser, $attr, $params){ // 1
foreach ($params as $atr[]) {
echo "$atr[0] - $atr[1] - $atr[2] - $atr[3] <br/>";
}

function tag_end($parser, $attr){ // 2
echo 'Koniec tagu '.$attr.'<br>';
}

$parser = xml_parser_create(); // 3

xml_set_element_handler($parser, 'tag_start', 'tag_end'); // 4

if(!($fp = fopen($_GET['file'], "r"))) { // 5
die("Nie można otworzyć podanego pliku XML!!!");
}

while($data = fread($fp, 4096)) {
if(!xml_parse($parser, $data, feof($fp))){ // 6
die(sprintf("Błąd XML: %s w linii %d",
xml_error_string(xml_get_error_code($_parser)),
xml_get_current_line_number($parser)));
}
}
xml_parser_free($parser); // 7

?>



ale to mi zwraca jakieś "krzaczki" zamiast poszczególnych wartości... co zrobiłem źle??


Łukasz
Piotr Maliński

Piotr Maliński Programista
Python/Django

Temat: odczyt XML w PHP

Można i tak:
$xml = simplexml_load_string($tutajxml);
foreach($xml->SM as $line)
{
print $line['id'].' - '.$line['stan'].'<br />';
}

konto usunięte

Temat: odczyt XML w PHP

coś chyba nie tak:
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Start tag expected, '<' not found in C:\wamp\www\odbior.php on line 51
Warning: simplexml_load_string() [function.simplexml-load-string]: C:\wamp\www\a.xml in C:\wamp\www\odbior.php on line 51
Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in C:\wamp\www\odbior.php on line 51
Warning: Invalid argument supplied for foreach() in C:\wamp\www\odbior.php on line 52

konto usunięte

Temat: odczyt XML w PHP

Piotr dobrze podpowiedział, SimpleXML... tyle, że coś tu żeście skaszanili ;p

konto usunięte

Temat: odczyt XML w PHP

tak działa:

$xml = simplexml_load_file("C:\wamp\www\a.xml");
foreach($xml->SM as $line)
{
print $line['id'].' - '.$line['stan'].' - '.$line['id'].'<br />';
}


ps. jak chcę czytać pliki XML z innego serwera, i podam url do niego:
$xml = simplexml_load_file("https://www.bla.pl");

to dostaję błąd:
Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "https://www.bla.pl/";

ten SimpleXML nie może czytać z www??Łukasz Peta edytował(a) ten post dnia 16.09.08 o godzinie 10:56
Piotr Maliński

Piotr Maliński Programista
Python/Django

Temat: odczyt XML w PHP

Może mieć problem z https :)

konto usunięte

Temat: odczyt XML w PHP

fakt, z http zadziałało :))) dzięki:)

konto usunięte

Temat: odczyt XML w PHP

a z takiego XMLa jak wyłuskać wartości:
<SerwerSMS login="Moj_login">
<Wiadomosc>Testerek</Wiadomosc>
<Od>
<Sk>
<SM id="123" numer="+481234567" wartosc="test"/>
</Sk>
</Od>
</SerwerSMS>

jakoś tak:

$xml = simplexml_load_file("$plik");
foreach($xml->Od->Sk->SM as $line)
{
echo"numer: $line[numer]";
}


??
Piotr Maliński

Piotr Maliński Programista
Python/Django

Temat: odczyt XML w PHP

jakoś tak :) zawsze możesz sobie print_r() zrobić na jakimś stopniu obiektu i zobaczyć czy jesteś tam gdzie chciałeś czy nie :) Jeżeli element się nie powtarza to można i bez pętli.Piotr Maliński edytował(a) ten post dnia 16.09.08 o godzinie 18:30
Tomasz Skaraczyński

Tomasz Skaraczyński projektant,
programista, ATP
Skaraczyński Tomasz

Temat: odczyt XML w PHP

W SimpleXML jest tak, że atrybuty trzymane są w tablicy asocjacyjnej czyli masz dostęp SM['id'] (przed SM poprawna ścieżka). Co do elementów zawartości znaczników to:

-jeżeli element jest tekstowy to odwołanie do niego pobiera wartość
-jeżeli element jest zawiera podelementy to są one tablicowane i możesz je iterować. Elementy złożone mapowane są na standardowe obiekty.

Następna dyskusja:

XML &gt; PHP




Wyślij zaproszenie do