Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: simplexml_load_string i przestrzenie nazw
Forum PHP.pl > Forum > PHP > Object-oriented programming
morrison
czy ktos potrafi mi powiedziec jak wykorzystac funkcje simplexml_load_string(); do zaladowania pliku XML o takiej postaci:

Kod
<bibtex:entry>
<bibtex:author>Ja</bibtex:author>
<bibtex:title>jak tralala</bibtex:title>
</bibtex:entry>


parser wyrzuca mi blad i nie akceptuje znaku ":". Niestety znak ten byc musi i jest on zgodny ze standardem XML wiec dlaczego sie tak dzieje? Jak zaladowac te znaczniki?
splatch
Nie jestem pewien, czy to pomoże (tzn czy SimpleXML to przełknie), ale zdefiniuj atrybut name space...
chmolu
SimpleXML na 100% obsługuje przestrzenie nazw. Jestem tego pewien.
Nie zapomniałeś przypadkiem o
  1. <?xml version="1.0" encoding="utf-8"?>


?
limak
nie trzeba za kazdym razem dodawac
  1. <?xml version="1.0" encoding="utf-8"?>
ponieważ simplexml potrafi także pracowac z fragmentami kodu XML.

problem pewnie jest inny.....
morrison
dokladnie te deklaracje mam, problem jest raczej gdzie indziej. tylko gdzie? stoje z projektem w miejscu przez to sad.gif

Cytat
Nie jestem pewien, czy to pomoże (tzn czy SimpleXML to przełknie), ale zdefiniuj atrybut name space...


jak zdefiniowac?
bela
Eh ludzie nauczcie się szukać. http://www.zend.com/php5/articles/php5-simplexml.php
morrison
dzieki, analizuje przyklady, ale mi to nie dziala.
oto plik n.xml
  1. <?xml version="1.0"?>
  2.  <entries xmlns:blog="http://www.edwardbear.org/serendipity/">
  3.  <blog:entry>
  4.  <blog:name>osa</blog:name>
  5.  </blog:entry>
  6.  <blog:entry>
  7.  <blog:name>pawel</blog:name>
  8.  </blog:entry>
  9.  </entries>


oto plik names.php
  1. <?php
  2. $entries = simplexml_load_file('n.xml');
  3. foreach ($entries->blog->entry as $entry) {
  4.  printf("%sn", $entry->name);
  5. }
  6.  
  7. ?>


i niestety parser wyrzuca taki blad:

Warning: Invalid argument supplied for foreach() in /home/pawel/public_html/names.php on line 4

co to moze oznaczac?
serafin
Bo robisz to zle - przede wszystkim xpath i wszystkie pozostale parsery jako sciezke traktuja nazwy galezi bez przestrzeni nazw. Czyli to:

foreach ($entries->entries as $entry) {
printf("%s\n", $entry->name);
}

powinno dzialac ;-)
morrison
wiem ze robie to zle - moj skrypt jest prosto ze strony zend.com smile.gif i nie dziala. ale gdy zrobilem tak jak poleciles to bledy zniknely z tym ze jest pusty ekran - atrybuty name nie sa wyswietlone, dlaczego? co zrobic zeby je zobaczyc?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.