Toon posts:

XML Path probleem ijn VB 6

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dag iedereen.

Ik zit met een xml-path probleem.

Zie ondestaande xml. (Het eche bestand is een stuk groter)

<?xml version="1.0" encoding="utf-8"?>
<programs>
<program pepeid="110627947">
<medium>Radio</medium>
<zender>Nederland 1</zender>
</program>
<program pepeid="110627947">
<medium>Radio</medium>
<zender>TCM</zender>
</program>
<program pepeid="110627947">
<medium>Radio</medium>
<zender>TCM</zender>
</program>
<program pepeid="110627947">
<medium>Radio</medium>
<zender>Nederland 1</zender>
</program>
<program pepeid="110627947">
<medium>Radio</medium>
<zender>Veronica</zender>
</program>
</programs>

Van deze xml wil ik de programmas selecteren waarvan de zender 'Nederland 1' is.
Als ik nu onderstaande code gebruik gaat het fout.

Set objXMLNodeList = objXMLRoot.selectNodes("program[zender='Nederland 1']")

Dit resulteert in een NodeList die veel meer elementen bevat dan verwacht (ook degene die geen 'Nederland 1' bevatten komer erbij.

Als ik wil selecteren op TCM als volgt gaat het wel goed
Set objXMLNodeList = objXMLRoot.selectNodes("program[zender='TCM']")

Zit dit hem in de spatie tussen Nederland en 1?

Wat doe ik fout ?

[ Voor 59% gewijzigd door Verwijderd op 28-03-2006 14:25 . Reden: typefout in eindtag van xml ]


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Ehm, je programs-element heeft geen sluit-element (</programs>). 't Zal wel een overtypfoutje zijn, maar je kan nooit weten :)

En bij mij werkt jouw XPath-expressie wel gewoon goed hoor. Anders moet je eens proberen jouw code alleen op dit fragment los te laten, en kijk of je dan (toevallig) ook maar 1 resultaatnode krijgt.

En wat je ook kan proberen is je expressie vooraf te laten gaan door twee slashes (dus "//program[zender='Nederland 1']"), kijk of je dan een ander resultaat krijgt. De twee slashes hebben als effect dat hij alle program-elementen matcht in het xml-document (die nederland 1 als zender hebben), niet alleen de children van je huidige element die program-elementen zijn.

Verwijderd

Topicstarter
De eindtag was inderdaad een overtypfoutje. Moet inderdaad </programs> zijn.

Maar het blijkt nu dat het bij mij inderdaad ook werkt.

Het gaat echter nog wel fout in de volgende code:

i = 0
Set objXMLNodeList = objXMLRoot.selectNodes("program[zender='Nederland 1']")
Set objXMLNode = objXMLNodeList.nextNode

Do Until objXMLNode Is Nothing 'Loop door alle velden
i = i + 1
If (objXMLNode.nodeType = NODE_ELEMENT) Then
Set objXMLElement = objXMLNode
strText = strText & objXMLElement.xml
End If
Set objXMLNode = objXMLNode.nextSibling
Loop



Uitgaande van bovenstaade xml zou je 2 keer door de loop moeten gaan (nederland 1 komt maar 2 keer voor) en zou de teller i op 2 moeten staan. Hij staat na de loop echter op 5 !

Enig idee hoe dit kan ?

[ Voor 4% gewijzigd door Verwijderd op 28-03-2006 14:26 ]


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 13:44

mulder

ik spuug op het trottoir

debuggen? Wat staat er in die elementen?

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Ik heb het opgelost :)

Ik heb de Do Loop veranderd in een For Each Loop als volgt

Set objXMLNodeList = objXMLRoot.selectNodes("program[zender='Nederland 1']")

For Each objNode In objXMLNodeList 'Loop door alle velden
Set objXMLElement = objNode
Next


Op deze manier werk het wel.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

XML:
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<programs>
  <program pepeid="110627947">
    <medium>Radio</medium>
    <zender>Nederland 1</zender>
  </program>
</programs>


Overigens kan je, voor de leesbaarheid, je XML code tussen [plain]
XML:
1
[/] tags frotten :)

[ Voor 3% gewijzigd door BtM909 op 28-03-2006 17:39 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.

Pagina: 1