Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Mini konwerter - brak pomysłu
Forum PHP.pl > Forum > Przedszkole
fastlone
Cześć.
Próbuję na własne potrzeby wykonać pewien konwerter. Wrzuca się do niego tekst na wzór tego
Kod
<object name="delux object">
        <position>63.7165 -1533.3571 5.9444</position>
        <rotation>-3.0052 0.0000 0.0000</rotation>
        <model>8168</model>
    </object>

Ma on za zadanie wyciągnąć wszystkie te wartości, po czym dodać je do bazy danych.
Jak na razie udało mi się zrobić samo zamienianie tekstu na zmienne, lecz nie wiem, jak je wywoływać.
Kod:
  1. <?php
  2. $echo = $_POST['test'];
  3. $echo = preg_replace("#<position>(.*?)\</position>#si",'$position = "\\1";\n',$echo);
  4. $echo = preg_replace("#<rotation>(.*?)\</rotation>#si",'$rotation = "\\1";\n',$echo);
  5. $echo = preg_replace('#<object name="(.*?)">#si','$object = "\\1";\n',$echo);
  6. $echo = preg_replace("#<model>(.*?)</model>#si",'$model = "\\1";\n',$echo);
  7.  
  8.  
  9. echo "<form method='post'><textarea name='test'></textarea><input type='submit' value='Send' /></form>";
  10.  
  11. echo $echo;
  12. ?>

Co muszę zrobić, by udało się te zmienne "stworzyć" w php? (W sensie, by można je było wywołać wpisując np $object).
mortus
Zamiast preg_replace() użyj preg_match():
  1. <?php
  2. $echo = $_POST['test'];
  3. $echo = preg_match("#<position>(.*?)\</position>#si", $echo, $position);
  4. $position = $position[1];
  5. // i podobnie w przypadku pozostałych zmiennych
  6. echo "<form method='post'><textarea name='test'></textarea><input type='submit' value='Send' /></form>";
  7.  
  8. echo $position;
  9. ?>
elektrrrus
A nie lepiej php-owe rozszerzenia xml-a?
fastlone
Już prawie działa kodzik, niestety nie działa mi w nim jedna rzecz
  1. <?php
  2. $test = $_POST['test'];
  3. $exploded = explode("</object>", $test);
  4.  
  5. for ($i=0;$i<count($exploded)-1;$i++)
  6. {
  7. $pos = $exploded[$i];
  8. $rot = $exploded[$i];
  9. $obj = $exploded[$i];
  10. $mode = $exploded[$i];
  11. $pos = preg_match("#<position>(.*?)\</position>#si", $pos, $position);
  12. $position = $position[1];
  13.  
  14. $rot = preg_match("#<rotation>(.*?)\</rotation>#si", $rot, $rotation);
  15. $rotation = $rotation[1];
  16.  
  17. $obj = preg_match('#<object name="(.*?)">#si', $obj, $object);
  18. $object = $object[1];
  19.  
  20. $mode = preg_match("#<model>(.*?)\</model>#si", $mode, $model);
  21. $model = $model[1];
  22.  
  23.  
  24.  
  25.  
  26. echo "Pozycja: {$position}<br />
  27. Object: {$object}<br />
  28. Rotacja: {$rotation}<br />
  29. Model: {$model}<br /><br />";
  30. }
  31. echo "<form method='post'><textarea name='test'></textarea><input type='submit' value='Send' /></form>";
  32. ?>

Wszystko jest wyświetlane ok, niestety nie trybi wyświetlanie objectu.
peter13135
ale po co się tak męczysz, skoro do tego jest xml ?
fastlone
Gdyż moja wiedza nie sięga zasobów xml'a. Jedyne co umiem, to PHP, i to nie w jakimś zadowalającym stopniu.
peter13135
I właśnie z tego powodu powinieneś użyć parsera XML,a nie męczyć się z regexpem
  1. <?
  2. $xml = simplexml_load_file('aaa.txt');//Tobie pewnie będzie wygodniej użyć funkcji simplexml_load_string
  3. echo $xml->position;
  4. echo $xml->rotation;
  5. echo $xml->model;
  6. echo $xml->attributes()->name[0];
  7. ?>
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.