Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

XPath i nelogican problem...

[es] :: .NET :: XPath i nelogican problem...

[ Pregleda: 1899 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

lopkiju

Član broj: 81874
Poruke: 31
*.astra-net.com.

Sajt: mojprevoz.com


Profil

icon XPath i nelogican problem...23.10.2006. u 02:45 - pre 213 meseci
Elem, XML fajl izgleda ovako:

Code:

<Root>
    <Application>
        <Form Name="Form1">
            <Module BoundToID="1" Namespace="SmallControls.TitlePanel" Position="Left" />
            <Module BoundToID="1" Namespace="SmallControls.FileBrowse" Position="Left" />
        </Form>
    </Application>
    <ModuleList>
        <Module ID="1" Path="SmallControls.dll" />
    </ModuleList>
</Root>


Ono sto ja zelim jeste da selektujem samo one nodove kojima je Form Name = Form1, tj. ova dva koja jedina i postoje trenutno.

Ovo je taj XPath query koji to postize:

Code:
/Root/Application/Form[@Name='Form1']/node()


Takav isti code mi fenomenalno obavlja posao u nekoj drugoj aplikaciji.

Problem ovde je sto kada pokrenem ovo, ovaj code dole mi vrati samo jedan jedini zapis i to onaj koji je prvi...

Code:
while (node.MoveNext())
{
    MessageBox.Show(node.Current.GetAttribute("Namespace", ""));
}


Zasto se tako ludo ponasa, ili sam ja taj koji ludim?
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: XPath i nelogican problem...23.10.2006. u 08:33 - pre 213 meseci
Probaj
Code:

/Root/Application/Form[@Name='Form1']/*
 
Odgovor na temu

lopkiju

Član broj: 81874
Poruke: 31
*.astra-net.com.

Sajt: mojprevoz.com


Profil

icon Re: XPath i nelogican problem...23.10.2006. u 12:00 - pre 213 meseci
Ne radi. Isto se ponasa kao i sa node().
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: XPath i nelogican problem...23.10.2006. u 12:08 - pre 213 meseci
Kako puniš promenljivu node? Šta ti je ona?
 
Odgovor na temu

lopkiju

Član broj: 81874
Poruke: 31
*.astra-net.com.

Sajt: mojprevoz.com


Profil

icon Re: XPath i nelogican problem...23.10.2006. u 12:19 - pre 213 meseci
Code:
nav = doc.CreateNavigator();
node = lng.nav.Select("/Root/Application/Form[@Name='Form1']/*");


node je XPathNodeIterator.
nav je XPathNavigator.
 
Odgovor na temu

lopkiju

Član broj: 81874
Poruke: 31
*.astra-net.com.

Sajt: mojprevoz.com


Profil

icon Re: XPath i nelogican problem...23.10.2006. u 17:07 - pre 213 meseci
Recite mi samo nesto.

Da li su uredu ova dva code-a?

Code:

            string position;
            string path;
            string name;

            Assembly ass;
            Type t;
            UserControl uc;
            Object o;
            int[] visina;

            lng.nav = lng.doc.CreateNavigator();
            lng.node = lng.nav.Select("/Root/Application/Module[@Form='Form1' or @Form='']");

            while (lng.node.MoveNext())
            {
                name = lng.node.Current.GetAttribute("Namespace", "");
                position = lng.node.Current.GetAttribute("Position", "");
                path = GetModulePath(int.Parse(lng.node.Current.GetAttribute("BoundToID", "").ToString()));

                ass = Assembly.LoadFile(Application.StartupPath + "\\" + path);
                t = ass.GetType(name);
                o = Activator.CreateInstance(t);

                uc = ( (UserControl)(o) );
            
                Find(moduleContainer1.panel1, position).Controls.Add(uc);

                visina = new int[2]; // Velicina niza zavisi od broja panela u ModuleContainer UCu.
            
                for (int i = 0; i <= moduleContainer1.panel1.Controls.Count -1; i++)
                {
                    foreach (UserControl c in moduleContainer1.panel1.Controls[i].Controls)
                    {
                        visina[i] += c.Height;
                    }
                }

                int j = 0;
                foreach (Panel pnl in moduleContainer1.panel1.Controls)
                {
                    pnl.Height = visina[j];
                    j++;
                }
            }


i ovaj

Code:

        public string GetModulePath(int id)
        {
            lng.nav = lng.doc.CreateNavigator();
            lng.node = lng.nav.Select("/YuGit/ModuleList/Module[@ID=" + id + "]");

            lng.node.MoveNext();

            return lng.node.Current.GetAttribute("Path", "");
        }


Stim sto sam morao da promenim organizaciju xml fajlu i sada xml fajl izgleda ovako:

Code:

<?xml version="1.0" encoding="utf-8" ?>
<YuGit>
    <Application>
        <Module Form="Form1" BoundToID="1" Namespace="SmallControls.TitlePanel" Position="Left" />
        <Module Form="Form1" BoundToID="1" Namespace="SmallControls.FileBrowse" Position="Left" />
    </Application>
    <ModuleList>
        <Module ID="1" Path="SmallControls.dll" />
    </ModuleList>
</YuGit>


Lng je instanca klase u kojoj se nalaze methode za manupulisanje xml fajlovima.

Samo mi recite da li su ova dva code-a uredu u odnosu na ovaj xml fajl, i da li bi trebali da rade?
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: XPath i nelogican problem...23.10.2006. u 21:33 - pre 213 meseci
Meni izgledaju ok, osim što ti je u prvom kodu root element pogrešan (Root umesto YuGit). Inače, ja nisam radio sa Navigator i NodeIterator klasama, kad treba da izvučem neki nodeset i iteriram kroz njega, koristim XmlDocument.SelectNodes metodu.

Poz.

PS Nadam se da ti YuGit nije naziv programa... ;)
 
Odgovor na temu

lopkiju

Član broj: 81874
Poruke: 31
212.200.5.*

Sajt: mojprevoz.com


Profil

icon Re: XPath i nelogican problem...23.10.2006. u 22:06 - pre 213 meseci
E vidis, sto je najgore, i meni code izgleda sasvim normalno, ali iako sam promenio organizaciju xml fajla kao i code koji treba da cita xml fajl, i dalje mi vraca samo prvi zapis.
Pre nego sto sam pitao da li valja code, nasao sam krivca za ovu nelogicnost.

Funkcija GetModulePath pravi probleme, kada komentiram liniju u kojoj se poziva f-ja, sve radi kako i treba da radi.
E sad, zasto se tako ponasa, ja nemam blage veze.

Da, to za YuGit i Root sam ja nesto menjao, ali sam xpath query prilagodio promenama - naravno :).

Sta fali YuGit-u :D?
A ne znam jos kako se zove program (to cemo sa kolegama developerima da se konsultujemo :)), sigurno ce imati veze sa YuGit-om (sa eventualno nekim dodacima) jer je program za njih, a tako se zove ta firma :).

Inace, hvala.
Da nisam ovde nesto napisao, ne verujem da bih pronasao krivca :).

Jos samo da vidim sta ne valja sa ovom f-jom...
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: XPath i nelogican problem...23.10.2006. u 22:25 - pre 213 meseci
Probaj da dodaš apostrofe oko vrednosti ID-ja:
Code:

lng.node = lng.nav.Select("/YuGit/ModuleList/Module[@ID='" + id + "']");

Ja zato volim da koristim metodu String.Format:
Code:

lng.node = lng.nav.Select(String.Format("/YuGit/ModuleList/Module[@ID='{0}']", id));


Što se imena tiče, konsultuj engleski rečnik za reč Git
 
Odgovor na temu

lopkiju

Član broj: 81874
Poruke: 31
*.astra-net.com.

Sajt: mojprevoz.com


Profil

icon Re: XPath i nelogican problem...23.10.2006. u 22:57 - pre 213 meseci
Ne vrede ni apostrofi ni String.Format...
Usko grlo je upravo f-ja. Ako je komentarisem, onda radi i bez apostrofa i sa njima i sa String.Format, cim je od komentarisem, eto problema.
Ne znam koji joj je...

A za Git, znam iz Mucki :), ali sta da radim kada se tako zove firma :).
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: XPath i nelogican problem...24.10.2006. u 08:25 - pre 213 meseci
Pa jesi li probao da debagiraš red po red?
 
Odgovor na temu

lopkiju

Član broj: 81874
Poruke: 31
*.astra-net.com.

Sajt: mojprevoz.com


Profil

icon Re: XPath i nelogican problem...24.10.2006. u 14:36 - pre 213 meseci
Naravno da sam radio debug.

Udje u f-ju, vrati mi putanju koju treba da vrati, ali while petlja se samo jednom izvrsi.
Kada izbacim tu f-ju sve radi fenomenalno...

Meni nista nije jasno...
 
Odgovor na temu

lopkiju

Član broj: 81874
Poruke: 31
*.astra-net.com.

Sajt: mojprevoz.com


Profil

icon Re: XPath i nelogican problem...24.10.2006. u 15:34 - pre 213 meseci
Nasao sam resenje, tacnije, kolega je nesto uvideo sto ja nisam.

Posto imam klasu koja manipulise sa xml fajlovima (ono lng) ja sam napravio globalnu instancu te klase i tu globalnu instancu klase, koristio za obe f-je.
Resenje je, napraviti jos jednu instancu klase za f-ju koja vraca putanju i resen problem...

Eto, koliko problema zbog previda.

Hvala Jablane na vremenu...
 
Odgovor na temu

[es] :: .NET :: XPath i nelogican problem...

[ Pregleda: 1899 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.