Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [xml] edycja i zapis
Forum PHP.pl > Forum > XML, AJAX
morrison
witam,

tworzę edytor plików m.in XML. W tym momencie edycja tych plików wygląda tak, że wyświetlana jest zawartość całego pliku razem ze znacznikami: <znacznik>, a chcę zrobić to tak aby wyświetlały się same dane pomiędzy znacznikami bez tych znaczników. I jak potem to wykonać by ewentualnie wyedytowane dane móc zmodyfikować i żeby zostały zapisane w odpowiednie miejsce w pliku??

bede wdzieczny za pomoc
Apo
to ci powinno pomóc:
simplexml_load_string
simplexml_load_file
TomASS
Musisz przeglądarkę poinformować o tym, że jest to właśnie plik XML, np (na samym początku pliku php):
  1. header("Content-type: text/xml; charset=UTF-8"); 
  2. echo '<?xml version="1.0" encoding="UTF-8"?>';


Oprócz tego kod ten powinien być poprawnym kodem XML.
morrison
hm...
Apo - te funkcje nie bardzo mogą mi pomóc gdyż korzystam z przestrzeni nazw i nie udało mi się jak dotąd ich użyć
TomASS - zle mnie zrozumiales - ja nie mam problemu z wyswietlaniem kodu w przegladarce.

chodzi mi o pomoc w skonstruowaniu skryptu w php, ktory bedzie edytowal w osobnych polach formularza dane zawarte w pliku XML - bez znacznikow xml'a. I aby byla mozliwosc modyfikacji tych danych i zapisania ich w odpowiednim miejscu w pliku XML z powrotem - nie bardzo wiem jak to napisac.

oto plik przykladowy XML:

  1. <?xml version="1.0" encoding="ISO-8859-2"?>
  2. <entries xmlns:bibtex="http://bibtexml.sourceforge.net">
  3. <bibtex:entry bibtex:id="7/2004">
  4. <bibtex:unpublished>
  5. <bibtex:author>23</bibtex:author>
  6. <bibtex:title>432</bibtex:title>
  7. <bibtex:note>234</bibtex:note>
  8. <bibtex:month>234</bibtex:month>
  9. <bibtex:year>2434</bibtex:year>
  10. </bibtex:unpublished>
  11. </bibtex:entry>
  12. <bibtex:entry bibtex:id="20/2004">
  13. <bibtex:mastersthesis>
  14. <bibtex:author>44</bibtex:author>
  15. <bibtex:title>44</bibtex:title>
  16. <bibtex:school>44</bibtex:school>
  17. </bibtex:mastersthesis>
  18. </bibtex:entry>
  19. <bibtex:entry bibtex:id="21/2004">
  20. <bibtex:inproceedings>
  21. <bibtex:author>df</bibtex:author>
  22. <bibtex:title>df</bibtex:title>
  23. <bibtex:editor>df</bibtex:editor>
  24. </bibtex:inproceedings>
  25. </bibtex:entry>
  26. </entries>
splatch
Myślę, że tutaj w sam raz będzie DOM Document ze swoimi "magicznymi" metodami - replaceChild, removeChild, appendChild. Do tego, możesz użyć getElementsByTagName, getElementsByTagNameNS, createElementNS..
Więcej - http://pl.php.net/DOM
yavaho
A wiec potrzebujesz parser plikow XML
Zobacz w manualu na te przyklady xml_parse
  1. <?php
  2. $url = 'plik.xml';
  3. $fp = @fopen($url,"r");
  4. if($fp===false) {
  5.  echo('Error reading or opening XML file');
  6. }else{
  7.  
  8.  $data = '';
  9.  while (!feof($fp)) {
  10. $data .= fread($fp, 8192);
  11.  }
  12.  fclose($fp);
  13.  
  14.  $engine = xml_parser_create ('');
  15.  xml_parse_into_struct($engine,$data,$dat,$index);
  16.  xml_parser_free($engine);
  17.  
  18.  echo '<hr />index array<br />';
  19.  print_r($index);
  20.  echo '<hr />\dat array<br />';
  21.  print_r($dat);
  22. }
  23. ?>
Teraz wystarczy edytowac interesujace cie rekordy
wrzasq
rozwijajac pomysl yavaho w oparciu o http://pl.php.net/manual/en/ref.xml.php mozesz napisac bardziej zlozony parser (latwo jest go zamknac w obiektach) szukajacy dokladnie tego, czego chcesz - xml_set_character_data_handler().
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.