Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana pozycji w XML
Forum PHP.pl > Forum > PHP
Largo
Witam,

Mam pewien problem dotyczący zmiany pozycji danych elementów, chodzi o drzewko do wyświetlanie w odpowiedniej kolejności.

  1. <images>
  2. <image id="4" order="0">
  3. <file>wn/m03.jpg</file>
  4. <alt>wn&#x119;trza mieszkalne</alt>
  5. <description><![CDATA[<h1>Wnętrze mieszkalne</h1>Projekt sypialni - wizualizacja.]]></description>
  6. </image>
  7. <image id="5" order="1">
  8. <file>wn/m04.jpg</file>
  9. <alt>projekt domu jednorodzinnego</alt>
  10. <description><![CDATA[<h1>Wnętrze mieszkalne</h1>Projekt sypialni - wizualizacja.]]></description>
  11.  
  12. </image>
  13. <image id="6" order="2">
  14. <file>wn/m01.jpg</file>
  15. <alt>aran&#x17C;acja</alt>
  16. <description><![CDATA[<h1>Wnętrze mieszkalne</h1>Projekt salonu - wizualizacja.]]></description>
  17. </image>
  18. </images>


Przykładowy XML wygląda tak. I mam strzałki, góra dół i muszę aktualizować atrybuty order. Nie chodzi mi o to, jak to się robi, bo znam metody DOM, ale raczej o metodologię podejście do tego. Na logikę trzeba edytować 3 elementy, górny, aktualny i dolny, albo 2 w zależności od końca. Ale jak do tego podejść nie mam pojęcia, coś na zasadzie sortowania bąbelkowego.
Zyx
A po co Ci sortowanie do posortowanych danych przy problemie, który zachowuje porządek? smile.gif Najgłupszy możliwy sposób to puszczenie pętli po wszystkich elementach i zapamiętywanie sobie poprzednika. Gdy natrafisz na element, który ma "id" taki, jak szukasz, wycinasz go z tego miejsca, używasz insertBefore(), by umieścić go przed poprzednim elementem i w obu zamieniasz wartości order. Możesz też wykorzystać XPath do znalezienia elementu, a później jest to kwestia zwykłego zorientowania się względem jego sąsiadów.
Largo
Cytat(Zyx @ 12.01.2010, 19:42:20 ) *
A po co Ci sortowanie do posortowanych danych przy problemie, który zachowuje porządek? smile.gif Najgłupszy możliwy sposób to puszczenie pętli po wszystkich elementach i zapamiętywanie sobie poprzednika. Gdy natrafisz na element, który ma "id" taki, jak szukasz, wycinasz go z tego miejsca, używasz insertBefore(), by umieścić go przed poprzednim elementem i w obu zamieniasz wartości order. Możesz też wykorzystać XPath do znalezienia elementu, a później jest to kwestia zwykłego zorientowania się względem jego sąsiadów.


Witaj,

Szukałem właśnie takiej metody, przyda się ta rada. Ale nie umiem jakoś skleić tego w całość, nie miałem do czynienia z XML i do końca nie rozumiem jego działania. Czy mógłbyś mi podać przykładową metodę, która by opisywała jak to ma wyglądać? I jak mam ustalić sąsiadów obok tego Node co chcę, skoro nie posługuję się indeksami, a nazwami atrybutów. To od ich pozycji mam iść o jeden krok w dół lub górę. O dziwo, muszę tak, bo nie chcę zmieniać sposobu wyświetlania na stronie głównej, a kolejność idzie zależnie od indeksów.

PS. Szukałem w XPath ze following-sibling, ale dalej nic nie rozumiem. Czy ktoś się zlituje i da przykład, nigdy wcześniej nie pracowałem na XML i mam duży problem z nim. Dokładnie mi zależy na tym, aby to działało na tej zasadzie: http://algorytmy.pl/?id=1822, ale na XML, nie HTML. Mam strzałki i na tej zasadzie mam przesuwać elementy tak, aby ich indeksy się zmieniały.
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.