[PHP]$DOM->getElementsByTagName('tr'); obcina wszystkie znaczniki |
[PHP]$DOM->getElementsByTagName('tr'); obcina wszystkie znaczniki |
21.10.2022, 18:22:13
Post
#1
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 5 Dołączył: 11.02.2011 Ostrzeżenie: (0%) |
Cześć,
chcę przenieść zawartość tabeli html do php by odpowiednio wyświetlić dane. Poniższy przykład działa prawie dobrze
jednak obcina za dużo ;-) Poza znacznikami tabeli usuwa też znaczniki linków, zdjęcia, które w tej taneli są. Co zrobić, by tak się nie działo? Z góry dziekuję za podpowiedzi... Ten post edytował php11 21.10.2022, 20:13:38 |
|
|
21.10.2022, 20:57:31
Post
#2
|
|
Grupa: Zarejestrowani Postów: 339 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
Wynika to z dokumentacji: https://www.php.net/manual/en/class.domdocument.php
`nodeValue` zwraca wartość STRING. Jak wiesz, że w znaczniku `td` masz jeszcze inne znaczniki HTML, to użyj po raz kolejny `childNodes`. |
|
|
21.10.2022, 21:11:57
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Jeśli chcesz uzyskać zawartość elementu jako string (coś w rodzaju innerHTML z JS), to użyj metody C14N.
Polecam: https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e01 https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e03 https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e03 https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e04 -------------------- |
|
|
22.10.2022, 08:16:12
Post
#4
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 5 Dołączył: 11.02.2011 Ostrzeżenie: (0%) |
Dzięki, powalczę.
Jako uzupełnienie dodam, że potrzebuję uzyskać: - tablice z zawartością znajdującą się między <tr></tr> - w której elementami będzie zawartość <td></td> |
|
|
22.10.2022, 08:48:09
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Jeśli jako zawartość rozumiesz kod HTML wewnątrz znacznika <td>, to C14N będzie tym, czego potrzebujesz.
Zakładam, że potrzebujesz tablicy dwuwymiarowej - musisz więc przeiterować po wierszach, w każdym wierszy po kolumnach i wyciągnąć wspomnianą zawartość. -------------------- |
|
|
22.10.2022, 15:39:35
Post
#6
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 5 Dołączył: 11.02.2011 Ostrzeżenie: (0%) |
Tak, dokładnie tego chcę, ale schody przede mną...
|
|
|
22.10.2022, 16:52:37
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Dla każdego wiersza musisz pobrać jego <td>. Sprawdź drugi argument metody query w dokumentacji.
Fajnie, że zerkałeś w moje przykłady, ale czy na pewno chodziło Ci o pobranie tylko nieparzystych wierszy? W artykule jest o tym mowa. -------------------- |
|
|
23.10.2022, 11:46:25
Post
#8
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 5 Dołączył: 11.02.2011 Ostrzeżenie: (0%) |
Echhhh, pierwszy poziom jakoś odbieram, ale dalej...
|
|
|
23.10.2022, 12:04:12
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Tak jak pisałem, dla każdego wiersza powinieneś pobrać jego <td> metodą query.
-------------------- |
|
|
23.10.2022, 12:39:45
Post
#10
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 5 Dołączył: 11.02.2011 Ostrzeżenie: (0%) |
Tak, wiem, próbuję to od wczoraj zrobić ...
Dzięki za cierpliwość :-) Edycja-------------------- Ponieważ nie dałem rady, wykombinowałem coś takiego: 1. Usunąlem zbędne znaki
2. Uworzyłem tablicę w wierszach
3. I chyba mam to, co chciałem do dalszej obróbki...
@trueblue, jeśli możesz podzielić się Twoim kodem to chętnie się czegoś nauczę :-) Domyślam się, że moja robota "na piechotę" nie jest za bardzo wydajna... Dzięki! Ten post edytował php11 23.10.2022, 13:44:34 |
|
|
24.10.2022, 09:36:06
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Mój błąd, metoda C14N jest odpowiednikiem outerHTML z JS, bo zwraca również kod aktualnego węzła. Ponadto przekształca kod HTML na zgodny z XML.
Poniższa metoda też nie jest idealna (ma pierwszą wadę z C14N, ale nie zmienia kodu).
Ten post edytował trueblue 24.10.2022, 09:36:31 -------------------- |
|
|
11.11.2022, 19:11:45
Post
#12
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 5 Dołączył: 11.02.2011 Ostrzeżenie: (0%) |
Dzięki!
Jednak nie mogę dojść, dlaczego znaczniki </td> nie są zawsze tak samo obcinane: https://prnt.sc/I7T7y8Imv5yQ Ten post edytował php11 11.11.2022, 19:12:20 |
|
|
11.11.2022, 19:14:25
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
A jak wygląda HTML?
-------------------- |
|
|
11.11.2022, 19:18:12
Post
#14
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 5 Dołączył: 11.02.2011 Ostrzeżenie: (0%) |
Dokładnie ten z Twojego postu powyżej
|
|
|
11.11.2022, 19:25:02
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Zmień na:
Nie wnikam dlaczego, ale jest różnica w tym co zwraca PHP <=7.2 (źle) a PHP >=7.3 (dobrze). W problematycznym przypadku pojawiają się czasem \n na końcach "wyciągniętej" zawartości <td>. P.S. Albo trim(... , "\n\r\t\v\x00") gdybyś jednak nie chciał tracić spacji wiodących i kończących. Ten post edytował trueblue 11.11.2022, 19:26:44 -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 18.04.2024 - 09:23 |