Pársování XML a zobrazení v DataGridu
- lumen
- Člen | 32
Ahoj,
potřeboval bych poradit jak řešit daný problém:
Mám DB tabulku se dvěma sloupci. První sloupec obsahuje ID a druhý je typu mediumtext a obsahuje XML. Chtěl bych takovou tabulku zobrazovat pomocí DataGridu tak, aby se v jednotlivých sloupcích zobrazovaly rozpársované elementy. Jak to provest?
Je jasné, že nemůžu celou tabulku „vyselectovat“, rozpársovat někam do pole a to pole zobrazit datagridem = tabulka má několik tisíc záznamů. Napadá mě rozpársovávat jen ty záznamy, které se mají uživateli zobrazit, ale netuším jak bych to prováděl – v jaké metodě, jak zjistím které záznamy se budou vykreslovat…
Ještě poddotaz – má Nette něco na práci s XML?
Díky za cokoli…
- Petr Motejlek
- Člen | 293
Jestli tomu dobře rozumím, ty máš dva sloupce, v jednom máš ID záznamu a ve druhém máš xml ve tvaru <sloupec>hodnota</sloupec><druhySloupec>hodnota2</druhySloupec><tretiSloupec>hodnota3</tretiSloupec>? Moje otázka je, jestli je počet elementů v tom sloupci s XML daty vždycky stejný, tzn, jestli dopředu víš, kolik sloupců by měla mít tabulka, nebo jestli se ti to mění, a ty to jindy, než po projití všech záznamů, nezjistíš.
Pokud počet sloupců znáš dopředu, přemýšlel bych o nějakém regexpu, který by se použil přímo v SQL, aby ti z databáze lezly ty sloupce jako vyextrahovaná data z patřičných elementů. Potom by s tím neměl mít datagrid problém. Určitě ale bude problém v editaci.
Pokud počet sloupců neznáš dopředu, tak si radši kup kulku a půjč pistoli ;). To AFAIK neuděláš jinak, než tak, že všechny záznamy projdeš. Maximálně bys to mohl mít lehčí, kdyby jsi stránkoval, a vypisoval to třeba po 50 záznamech, ty projdeš (snad) ještě celkem rychle.
P. S.: Já jsem se na Datagrid zatím jen díval, ještě jsem ho plně nikde nepoužil, takže to, co tady o něm píšu jsou možná jen bláboly, ale napadla mě jedna věc: možná by (v souvislosti s tímto) nebylo špatné, kdyby se u Datagridu řešilo něco jako interface DataAdapter, který by měl za úkol vracet pole s hodnotami pro daný řádek, a zároveň by uměl ty hodnoty zase někam zapsat. Když potom mám takovýhle hybrid databáze a XML dat, tak bych v tom čtení dělal select, parsoval to XML, vrátil pole, a při zápisu bych z toho pole zase udělal XML a to uložil do databáze.
Editoval Petr Motejlek (19. 1. 2010 12:29)
- lumen
- Člen | 32
Ty XML v databázové tabulce jsou v každém rádku stejné – mění se
jen hodnota v elementech. V každém XML je vždy 10 elementů a mě
zajímají jen 2. Tyto dva elementy bych chtěl vypisovat ve dvou sloupcích
datagridu.
Jde mi pouze a jen o zobrazení záznamů – není potřeba editace.
Objevil jsem teď, že se v datagridu se dá nastavit anonymní callback
funce pro úpravu dat ve sloupci:
jako například:
<?php
$grid['xml_sloupec']->formatCallback[] = function ($value) {
return parsujAvratElement($value);
}
?>
je možné, že by to tím šlo udělat…
- Petr Motejlek
- Člen | 293
Ta editace by tak asi řešit šla. Pokud to chceš mít rychlé, šel bych cestou nějakého promakaného regexpu a výběr těch elementů jako sloupců přímo z databáze. Můžeš taky parsovat každý sloupec jako XML a hodnoty těch elementů přečíst přes PHP, ale to bude IMHO dost pomalé…