Toon posts:

[VB.NET 2005] XPath meerdere filters op nodes

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een xml document en daaruit wil ik gegevens selecteren op basis van meerdere parameters/filters. Ik zal eerst de structuur van mijn xml document laten zien dat is makkelijker:
XML:
1
2
3
4
5
6
7
8
9
<planningen>
  <personeel>
    <planning id="0">
       <datum>26-3-2007</datum>
        <projectnr>5000</projectnr>
        <personeelscode>12345</personeelscode>
    </planning>
  </personeel>
</planningen>

En zo heb ik meer dan 1000 planningen in dat xml document, met verschillende projectennr's en personeelscodes. Het enige wat ik wil is dus de datum selecteren op basis van projectnr en personeelscode. Op internet zie ik genoeg voorbeelden met 1 node filter maar niet met 2. Ik zie genoeg voorbeelden met meerdere filters voor attributen maar daar heb ik ook niks aan. Ik zie alleen geen voorbeelden van meerdere filters op nodes. Ik ben zelf wat gaan proberen en zal even laten zien wat ik heb:
Visual Basic .NET:
1
2
3
Dim xmldoc As New XPathDocument(filename)
Dim nav As XPathNavigator = xmldoc.CreateNavigator()
Dim iterator3 As XPathNodeIterator = nav.Select("//projectnr[. = '" & projectnr & "' and personeelscode= '" & perscode & "']/parent::node()/datum")

De rest van de code is niet zo relevant omdat in de laatste regel de fout zit. Met 1 filter gaat deze code trouwens prima.

Ik heb daarbij nog een vraag, ook over xpath.
Hoe selecteer je unieke waarden uit je xml document gebaseerd op een node.
Dus stel ik wil in mijn xml document alle values terugkrijgen van personeelscodes zonder dubbele waarden,
Ik hoop dat iemand mij kan helpen met dit probleem.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Lukt die xpath-query die je laat zien dan niet ? Wat krijg je terug als resultaat ?

Verder denk ik dat je eerder een DB wilt gebruiken ...

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op vrijdag 04 mei 2007 @ 09:12:
Lukt die xpath-query die je laat zien dan niet ? Wat krijg je terug als resultaat ?

Verder denk ik dat je eerder een DB wilt gebruiken ...
Hij geeft niks terug, terwijl ik zeker weet dat er wel een resultaat is voor die filters. Als ik de parameters debug zijn het de juiste waarden. Ik had alles ook eerst in een database maar xml heeft voordelen met betrekking tot flexabiliteit, aangezien het product voor een klant is. Maar denk jij dat de Xpath query wel goed geformuleerd is op deze manier dan ?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Om nog even over het DB verhaal verder te gaan : XML is geen 'vervanger' voor een DB. Maw, je moet geen XML bestanden gebruiken als een DB. Het doel van XML is geheel anders dan het doel van een DB.

Volgens mij is je query trouwens niet juist. Als ik het goed heb, specifieer je dat je projectnr nodes wilt selecteren. Echter, je wilt de datum. Volgens mij moet je dus planning nodes gaan selecteren, en dan je voorwaarden specifieren.
code:
1
//planning[projectnr=5000 and personeelscode=1234]/datum

Volgens mij is het eerder zo: selecteer de planning nodes met projectnr 5000 en pers. code 1234 en geef mij daar de datum node van terug.
(Wat dat puntje trouwens doet in je xpath query is mij ook een raadsel ? )

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ja, je ziet op internet 2 manieren, mijn manier en daarbij selecteer je niet projectnr maar de node die helemaal achteraan staat, want met 1 filter werkt dat gewoon. En je ziet jouw manier ook op internet.
Op deze site kan je lezen wat alles betekent, waaronder de punt(.):
http://www.developerland.com/DotNet/XMLNET/235.aspx
ik zit nu bij een training van jsf en ajax, vanavond ga ik het gelijk proberen.
en xml is idd niet echt vervanging voor db, meer voor configuraties en dergelijke maar de mogelijkheid wordt je wel geboden en het leek me leuk omdat een keer uit te zoeken.

p.s. de data wordt na succesvolle uitvoering overigens verwijderd, het blijft niet opgeslagen, dat is ook een reden om voor xml te kiezen

[ Voor 10% gewijzigd door Verwijderd op 04-05-2007 10:11 ]


Verwijderd

Topicstarter
het werkt :*) maar vergeet de enkele quotes (') niet want zonder die werkt het niet, krijg je een error over een verkeerde token ofzo.
XML:
1
//planning[projectnr='5000' and personeelscode='1234']/datum
is de juiste code.
Bedankt :)
Pagina: 1