Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][PHP]Odczyt i zapis pliku XML
Forum PHP.pl > Forum > Przedszkole
krh2
czesc,

mam taki problem, probuje odczytac dane z pliku XML (dokladnie to CityGML) i mniej wiecej takiej strukturze:

  1. <CityModel>
  2. <gml:boundedBy>
  3. <gml:Envelope srsName="EPSG:25834" srsDimension="3">
  4. <gml:lowerCorner>115253.5092 6255736.3205 0</gml:lowerCorner>
  5. <gml:upperCorner>115293.3308 6255775.2659 12.7664999999979</gml:upperCorner>
  6. </gml:Envelope>
  7. </gml:boundedBy>
  8. <cityObjectMember>
  9. <gen:GenericCityObject gml:id="Building_1">
  10. <gen:intAttribute name="Object_ID">
  11. <gen:value>1</gen:value>
  12. </gen:intAttribute>
  13. <gen:stringAttribute name="citygml_feature_role">
  14. <gen:value>cityObjectMember</gen:value>
  15. </gen:stringAttribute>
  16. <gen:lod4Geometry>
  17. <gml:MultiSurface srsName="EPSG:25834" srsDimension="3">
  18. <gml:surfaceMember>
  19. <gml:Polygon gml:id="fme-gen-d553528a-9b5d-4338-ab36-f1189a823ff9">
  20. <gml:exterior>
  21. <gml:LinearRing>
  22. <gml:posList>
  23. 37.8846531668 49.310087411 0 37.8815274028 49.3099858492 4.05 37.8816104346 49.3099791575 4.05 37.8846531668 49.310087411 0 37.8815274028 49.3099858492 4.05 37.8816104346 49.3099791575 4.05 37.8846531668 49.310087411 0 37.8815274028 49.3099858492 4.05 37.8816104346 49.3099791575 4.05 37.8846531668 49.310087411 0 37.8815274028 49.3099858492 4.05 37.8816104346 49.3099791575 4.05 37.8846531668 49.310087411 0 37.8815274028 49.3099858492 4.05 37.8816104346 49.3099791575 4.05 37.8846531668 49.310087411 0 37.8815274028 49.3099858492 4.05 37.8816104346 49.3099791575 4.05 37.8846531668 49.310087411 0 37.8815274028 49.3099858492 4.05
  24. </gml:posList>


i teraz chce odczytac caly plik XML i wszystkie wspolrzedne z gml:posList zapisac do tablicy, wiec zrobilem tak:

  1. $XML = new XMLReader();
  2. $XML->open('xyz.xml');
  3.  
  4. $count=0;
  5.  
  6. while($XML->read())
  7. {
  8. if($XML->nodeType == XMLReader::ELEMENT)
  9. {
  10. $name = $XML->name;
  11.  
  12. if ($XML->name == 'gml:posList') //wg czego ma byc wyszukiwane
  13. {
  14. $crdSet[$count] = array();
  15.  
  16. }
  17. }
  18.  
  19. if($XML->nodeType == XMLReader::TEXT || $XML->nodeType == XMLReader::CDATA)
  20. {
  21. $crdSet[$count] = $XML->value;
  22.  
  23. }
  24.  
  25. if($XML->nodeType == XMLReader::END_ELEMENT)
  26. {
  27. if ($XML->name == 'gml:posList')
  28. {
  29. $count++;
  30. }
  31. }

i wszystko dziala jak trzeba, ale problem jest taki ze jako ostatni element tablicy zapisywane jest

[1123] => #fme-gen-379ac36c-b559-435f-95a5-60f255d1bdd5

ktory nie ma zupelnie nic wspolnego z gml:posList a znajduje sie na koncu pliku w
  1. <app:surfaceDataMember>
  2. <app:X3DMaterial gml:id="fme-gen-a71733d0-2a38-4273-a589-7d68bc96eaae">
  3. <app:diffuseColor>0.8 0.713725490196078 0.63921568627451</app:diffuseColor>
  4. <app:target>#fme-gen-953b831a-00b1-4296-8e9c-7143c032744a</app:target>
  5. <app:target>#fme-gen-c7a6e972-3fe4-4c0f-99a4-837ae1e6a705</app:target>
  6. <app:target>#fme-gen-ca39257f-9e58-4764-ba26-056ee3c0c77a</app:target>
  7. <app:target>#fme-gen-439bd972-d0c5-41ea-b57c-bb1327d9cf05</app:target>
  8. <app:target>#fme-gen-379ac36c-b559-435f-95a5-60f255d1bdd5</app:target>


czy ktos moze mi podpowiedziec co robie zle ze zapisuje mi sie wartosc zupelnie z innego wezla? dzieki!
singollo
Sprawdzaj, w jakim elemencie się znajdujesz, bo teraz bierzesz elementy tekstowe z każdego węzła.
krh2
dzieki, faktycznie przeszukiwalem nie ten wezel co trzeba.
thek
Jeśli wiesz, że masz stałą pozycję elementu w strukturze, to zamias sie bawić w pętle, wykorzystaj XPath. Prostsze to o wiele. Przykład?
//CityModel/cityObjectMember/gen:GenericCityObject/gen:lod4Geometry/gml:MultiSurface/gml:surfaceMember/gml:Polygon/gml:exterior/gml:LinearRing/gml:posList
Powinno chyba być ścieżką do elemenó o jakie Ci chodzi.
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.