Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Obsługa różnych dokumentów XML
p123
post 13.11.2013, 15:24:05
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 13.12.2009

Ostrzeżenie: (0%)
-----


Witam,
na początku chciałbym poinformować, że zagadnienia związane z XML są dla mnie dość zawiłe dlatego proszę o wyrozumiałość przy czytaniu oraz odpowiedzi na moje pytanie (tym bardziej jeśli odpowiedź jest banalna tongue.gif).
Sytuacja przedstawia się nastepująco:
Otrzymuję zamówienia w formacie XML, które mają taką samą strukturę (hierarchię) ale różnią się nazwami elementów np. w jednym dokumencie imię opisane jest za pomocą elementu imie, w drugim jako name, a w trzecim jako pole1. Czy istnieje jakiś sposób wskazania programowi przetwarzającemu informacje z dokumentów XML, że te trzy elementy zawierają tę samą informację? Lub czy istnieje możliwość jakiegoś przekształcenia każdego z tych dokumentów do postaci XML, w której będzie ta sama nazwa elementu?
Mam nadzieję, że odpowiednio opisałem swój punkt widzenia. Nie chodzi mi tutaj o dokładne wyjaśnienie jak to zrobić itd. tylko o odpowiedź czy takie coś jest w ogóle możliwe a jeśli tak to w jaki sposób powinno być wykonane?
Go to the top of the page
+Quote Post
Crozin
post 13.11.2013, 18:15:25
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Utwórz sobie obiekt domeny, który będzie reprezentować odczytane dane, np.:
  1. class Order {
  2. private $name;
  3. private $address;
  4. // ...
  5.  
  6. // gettery i settery
  7. }
2. Przygotuj sobie zestaw obiektów, do odczytywania danych z różnych źródeł, w tym przypadku plików XML o różnej budowie:
  1. interface OrderReader {
  2. read(); // zwraca kolejny obiekt Order
  3. readAll(); // zwraca tablicę/kolekcję obiektów Order
  4. }
  5.  
  6. abstract class XmlOrderReader implements OrderReader {
  7. protected $doc;
  8.  
  9. public function openFile($file) {
  10. $fileContents = file_get_contents($file);
  11.  
  12. $this->doc = new DomDocument();
  13. $this->doc->loadXml($fileContents);
  14. }
  15.  
  16. public function readAll() {
  17. $data = array();
  18.  
  19. while (($object = $this->read()) !== null) {
  20. $data[] = $object;
  21. }
  22.  
  23. return $data;
  24. }
  25. }
  26.  
  27. class FormatAOrderReader extends XmlOrderReader {
  28. public function read() {
  29. // odczytanie kolejnego rekordu na podstawie XML-a
  30.  
  31. return $object;
  32. }
  33. }
  34.  
  35. class FormatBOrderReader extends XmlOrderReader {
  36. public function read() {
  37. // odczytanie kolejnego rekordu na podstawie XML-a
  38.  
  39. return $object;
  40. }
  41. }
  42.  
  43. class FormatCOrderReader extends XmlOrderReader {
  44. public function read() {
  45. // odczytanie kolejnego rekordu na podstawie XML-a
  46.  
  47. return $object;
  48. }
  49. }
Teraz pozostaje Ci jedynie utworzenie odpowiedniego readera dla danej sytuacji.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 12:11