XML SelectSingleNode bez rekurze

Sfggdgz

Re:XML SelectSingleNode bez rekurze? Lze to?
« Odpověď #15 kdy: 20. 04. 2015, 04:17:19 »
Citace
Protože implementuju vlastní formát souboru, který není zcela kompatibilní s XML.

soubor bud je nebo neni xml.
to je chyba zacatecniku, ze hned zacne vymyslet
Vlastni format a pak ma prace nad hlavu s parserem.


Kit

Re:XML SelectSingleNode bez rekurze? Lze to?
« Odpověď #16 kdy: 20. 04. 2015, 08:45:09 »
Podle přiblblého zápisu ob řádek bych také tipl C#.
co ma preboha ob radek spolocneho s C# ?

Je to zlozvyk zejména u programátorů v C#, který v jiných jazycích není tak častý.

Kit

Re:XML SelectSingleNode bez rekurze? Lze to?
« Odpověď #17 kdy: 20. 04. 2015, 08:47:13 »
Pořád mi není jasné: Proč nepoužiješ XPath? Nebudeš potřebovat ani rekurzi, ani cyklus.

Protože implementuju vlastní formát souboru, který není zcela kompatibilní s XML.

Tak to je jednoduché: Udělej ten svůj vlastní formát tak, aby byl zcela kompatibilní s XML.

Re:XML SelectSingleNode bez rekurze
« Odpověď #18 kdy: 20. 04. 2015, 09:51:16 »
malá úprava a kód funguje, jen na začátek metody patří:

Kód: [Vybrat]
CfgNode retNode = cfgNode;

Předtím jsem tam dosazoval null.

Diky vsem.
Ten kód je na můj vkus málo přehledný. Rekurze se většinou v takovýchto případech dělá tak, že funkce má dvě možné větve: buď jsem našel, co jsem hledal, tak to vrátím (normálním returnem, jak psal Kit), nebo jsem to nenašel, takže jdu hlouběji (rekurze). Čili žádné pomocné proměnné "retNode", žádné jejich nastavování někde uvnitř podmínek a vracení někde úplně jinde. Prostě jenom if(je_to_to_co_hledam(x)) return x; To je celé, nehledat v tom složitosti (andyho rada vyzkoušet si fibonacciho není vůbec od věci).

Tvůj případ je jednoduchý v tom, že hledáš jeden konkrétní uzel, takže ho pohodlně můžeš vrátit returnem. Pokud bys potřeboval např. po celém stromu posbírat uzly, které mají nějakou vlastnost, potřeboval bys akumulátor a bylo by to mírně složitější, ale v tom tvým případě je to snadný.

Re:XML SelectSingleNode bez rekurze
« Odpověď #19 kdy: 20. 04. 2015, 09:56:21 »
Jo a ještě jeden námět k zamyšlení: pokud hledám ve stromu nějaký uzel pomocí cesty, je většinou dobrý neporovnávat pořád celou cestu, ale porovnávat jenom první položku cesty a při každé rekurzi ji odstřihnout a dál propagovat jenom ten ocas, protože o tom začátku  už víš, že sedí, tak ho nemusíš porovnávat pořád dokola. Nějak takhle:

Kód: [Vybrat]
if (childNode.name == prvni polozka cesty) {
  if (zadna dalsi polozka) return childNode;
  rekurze(childNode,cesta bez prvni polozky);
}


Sfggdgz

Re:XML SelectSingleNode bez rekurze
« Odpověď #20 kdy: 20. 04. 2015, 13:12:47 »
Na praci s listy je dobry prolog, tam se pracuje jen s head listu a zbytek je tail listu. A v dalsim kroku rekurze se zas z puvodniho
tailu stane list a zas se to rozsekne na head a tail. A furt dal.

Re:XML SelectSingleNode bez rekurze
« Odpověď #21 kdy: 20. 04. 2015, 14:03:26 »
Na praci s listy je dobry prolog, tam se pracuje jen s head listu a zbytek je tail listu. A v dalsim kroku rekurze se zas z puvodniho
tailu stane list a zas se to rozsekne na head a tail. A furt dal.
Na to není potřeba prolog, takhle je to i ve všech funkcionálních jazycích. A v nefunkcionálních se to dá použít taky, akorát obvykle ne tak jednoduše.

Giovanna

Re:XML SelectSingleNode bez rekurze? Lze to?
« Odpověď #22 kdy: 20. 04. 2015, 20:43:36 »
Citace
Protože implementuju vlastní formát souboru, který není zcela kompatibilní s XML.

soubor bud je nebo neni xml.
to je chyba zacatecniku, ze hned zacne vymyslet
Vlastni format a pak ma prace nad hlavu s parserem.

Je to tim, ze jsem prisel do firmy a nemuzu jim ze sve pozice rict, předělejte cfg soubory na xml a co xml neumi, to zahodte.

Re:XML SelectSingleNode bez rekurze? Lze to?
« Odpověď #23 kdy: 20. 04. 2015, 21:02:00 »
Je to tim, ze jsem prisel do firmy a nemuzu jim ze sve pozice rict, předělejte cfg soubory na xml a co xml neumi, to zahodte.
Jenom tak ze zvědavosti: a co tam používáte, že by to něšlo pomocí XML? Nebo jsi to myslel opačně? Že používáte nějaký jazyk/nástroj, který neumí pracovat s XML? Každopádně ať tak nebo tak, docela by mě zajímalo, o co jde, protože zpracování XML je dneska už skoro jako umět spojit dva řetězce ;)

Giovanna

Re:XML SelectSingleNode bez rekurze
« Odpověď #24 kdy: 20. 04. 2015, 21:28:37 »
Jsem externista a nevim vse, ale podmínkou(delam agregator pro zmenu hodnot v konfiguracích na ruznych mistech) bylo, ze at xml, cfg, nebo ini soubor atd. (do budoucna) musí zustat absolutne beze zmeny vcetne zakomentovane historie - není problém najit v konfiguraku, který není xml, zakomentovane nastaveni hodnot s komentářem na konci = historie nastaveni / backup. Jenom me napadlo, ze XmlDocument bych mohl pouzit pro ulozeni a zmenu hodnot, pokud bych napr. udelal potomka z XmlElement a dodal si tam ty dodatecne věci. Ted mam hotovou a funkcni tridu na 250 radek a zachovavam format.

Co Vy na to?


Giovanna

Re:XML SelectSingleNode bez rekurze
« Odpověď #25 kdy: 28. 04. 2015, 17:51:23 »
Ještě jeden dotaz, prosím.

Kdybyste museli souhlasit s tím, že už ty cfg soubory existují, uvažovali byste o použití regulárního výrazu pro vyhledání proměnné místo parseru?

Příklad cfg souboru, hloubka stromu není znama:

Kód: [Vybrat]
Root
{
   ElementA
   {
      a = 1 # nejaky komentar
      #a = 0 #puvodni hodnota zakomentovana
   }

   ElementB
   {
      ElementB1
      {
         ... další nastaveni promennych
         ...
      }
      ElementB2
      {
         ...
         ...
      }
   }
   ...
}

Děkuji

Re:XML SelectSingleNode bez rekurze
« Odpověď #26 kdy: 28. 04. 2015, 17:54:35 »
Kdybyste museli souhlasit s tím, že už ty cfg soubory existují, uvažovali byste o použití regulárního výrazu pro vyhledání proměnné místo parseru?
Ne, protože to není regulární jazyk, čili to regulárním výrazem parsovat nejde. Viz http://cs.wikipedia.org/wiki/Chomsk%C3%A9ho_hierarchie

Natix