Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 10 odgovora
  • 4.751 pregleda

Najnovija ↓

XPath problem: neke "putanje" rade, neke ne 22.05.2007. u 02:09 · pre 236 meseci
izmenjeno 1 put, poslednji put Shadowed 22.05.2007. u 02:38
  1. Shadowed22.05.2007. u 02:38zapis iz teksta poruke
#1
Imam XML fajl:
Code:

<group>
  <name>BaseGroup</name>
  <vpnname>
  </vpnname>
  <username>
  </username>
  <password>
  </password>
  <path>Remoted</path>
  <groups>
    <group>
      <name>group1</name>
      <vpnname>
      </vpnname>
      <username>
      </username>
      <password>
      </password>
      <path>Remoted\group1</path>
      <groups>
        <group>
          <name>group1-1</name>
          <vpnname>
          </vpnname>
          <username>
          </username>
          <password>
          </password>
          <path>Remoted\group1\group1-1</path>
        </group>
      </groups>
      <servers>
        <server>
          <name>server1-1</name>
          <hostname>serverbla</hostname>
        </server>
      </servers>
    </group>
    <group>
      <name>group2</name>
      <vpnname>
      </vpnname>
      <username>
      </username>
      <password>
      </password>
      <path>Remoted\server2</path>
    </group>
  </groups>
</group>


Me.Name = data.SelectNodes("/group/name")(0).InnerText radi normalno, tj. nalazi "BaseGroup"
Dim GroupNodes As XmlNodeList = data.SelectNodes("/group/gourps/group") vraca praznu listu.

Da li nesto previdjam ili... ?
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: XPath problem: neke "putanje" rade, neke ne 22.05.2007. u 13:17 · pre 236 meseci #3
Znaci, ne verujem... 10 puta sam gledao da nisam pogresno napisao...
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: XPath problem: neke "putanje" rade, neke ne 22.05.2007. u 16:34 · pre 236 meseci #4
Hm, sad imam nov problem...
Code:

Public Sub RestoreFromXML(ByVal data As XmlNode)
    With data
...
    Dim GroupNodes As XmlNodeList = .SelectNodes("/group/groups/group")
        If GroupNodes.Count > 0 Then
            For Each GroupNode As XmlNode In GroupNodes
                Dim tmpGroup As New Group
                tmpGroup.RestoreFromXML(GroupNode)
                Me.ChildGroups.Add(tmpGroup)
            Next
        End If
    End With
End Sub

Ovo je rekurzivna funkcija koja bi trebala da kreira stablo grupa i servera (ovo za servere sam izbacio, ovde je nebitno). Nalazi se kao metod u klasi Group.
Problem je u tome sto uvek dobijam istu GroupNodes listu i samim tim se rekurzija izvrsava sve dok ne prepuni stack.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: XPath problem: neke "putanje" rade, neke ne 22.05.2007. u 18:00 · pre 236 meseci #5
Malo dodatnih podataka.
Stavio sam brakepoint i prilikom prvog prolaska GroupNode ima XML koji i treba:
Code:

<group>
      <name>group1</name>
      <vpnname>
      </vpnname>
      <username>
      </username>
      <password>
      </password>
      <path>Remoted\group1</path>
      <groups>
        <group>
          <name>group1-1</name>
          <vpnname>
          </vpnname>
          <username>
          </username>
          <password>
          </password>
          <path>Remoted\group1\group1-1</path>
        </group>
      </groups>
      <servers>
        <server>
          <name>server1-1</name>
          <hostname>serverbla</hostname>
        </server>
      </servers>
    </group>


Medjutim, kada se ponovo pozove funkcija sa ovim Node-om, prilikom selekcije sa "/group/groups/group" umesto da dobijem jedan node koji imas xml:
Code:
<group>
          <name>group1-1</name>
          <vpnname>
          </vpnname>
          <username>
          </username>
          <password>
          </password>
          <path>Remoted\group1\group1-1</path>
        </group>

ja dobijem listu od dva node-a od kojih prvi ima isti onaj gore xml.
Najcudnije mi je sto u provom prolazu radi, u drugom ne.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: XPath problem: neke "putanje" rade, neke ne 22.05.2007. u 19:32 · pre 236 meseci #6
Xpath ti pocinje sa / sto vuce na root. XPath se uvek primenjuje na trenutni node u okviru celog stabla, narodski iako trazis XPath nad nodom, sam path je u "apsolutnom" modu i uvek vraca isto... Probaj sa relativnom XPath putanjom "groups/group" u rekurziji..

Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: XPath problem: neke "putanje" rade, neke ne 22.05.2007. u 20:52 · pre 236 meseci #7
Ako stavim "groups/group" ne dobijam ni jedan, sto mi je i logicno, jer root element je group pa mora krenuti od njega. Ako stavim "group/groups/group", znaci isto kao na pocetku samo kao relativno putanju, u prvom krugu dobijem dva node-a, kao i sa apsolutnom putanjom, dok u drugom kada se prosledi samo unutrasnji deo (xml za podgrupu), ne vrati ni jedan (iako postoji ova "group1-1" grupa.
Sve ovo mi izgleda totalno uvrnuto. A i mislim da ne bi trebalo da bude razlike izmedju apsolutne i relativne putanje ovde jer prilikom novog poziva funkcije, dobija se samo unutrasnji deo xml-a i kada se on gleda, apsolutna putanja je taman kako treba.

Inace, ako iko ima ideju kako ovo da se uradi na drugi nacin, dobrodoslo je. Bitno mi je jedino da bude obican fajl a ne baza i pozeljno je da je xml.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: XPath problem: neke "putanje" rade, neke ne 22.05.2007. u 21:31 · pre 236 meseci #8
Ok, onda izvuci /group node i pozovi rekurziju nad njim specificirajuci /groups/group kao xpath u rekurziji...

XmlDocument nije jednako <group> nodu, vec je korak iznad njega.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: XPath problem: neke "putanje" rade, neke ne 23.05.2007. u 11:31 · pre 236 meseci #10
Odustadoh od ovog nacina. Probao sam XMLSerializer i radi sasvim zadovoljavajuce, cak daje godovo isti XML kao ovaj koji sam ja koristio. Ostale podatke cu staviti u drugi fajl iako sam se nadao da imam samo jedan config fajl.
Bar sam naucio jednu stvar - da je XPath ipak komplikovaniji nego sto izgleda :)

Hvala, spartak i mmix.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: XPath problem: neke "putanje" rade, neke ne 23.05.2007. u 16:12 · pre 236 meseci #11
Ok, nesto se mi nismo bili razumeli, sad sam proverio i definitivno je u pitanju absolue vs relative path (prepevah tvoj sample u C#):

Code:

    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("data.xml");

            Group g = new Group();
            g.RestoreFromXML(doc.DocumentElement);

        }
    }

    public class Group
    {
        Collection<Group> ChildGroups = new Collection<Group>();
        public void RestoreFromXML(XmlNode data)
        {
            XmlNodeList GroupNodes = data.SelectNodes("groups/group");

            if (GroupNodes.Count > 0)
                foreach (XmlNode GroupNode in GroupNodes)
                {
                    Group tmpGroup = new Group();
                    tmpGroup.RestoreFromXML(GroupNode);
                    this.ChildGroups.Add(tmpGroup);
                }
        }

    }


i ovo radi sasvim ok, sto se vidi iz prilozene slike



I ja bih ti licno predlozio da koristis XML serijalizaciju za ove stvari (i to te ne spracava stvais sta god hoces u jedan config file), ali XPath definitivno jeste jednostavan :)
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme