xpath - hoe werkt de contextNode ?

Pagina: 1
Acties:

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 12-02 10:41

chem

Reist de wereld rond

Topicstarter
Men neme de volgende html-snippet:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<body>

<ol><li>waa?</li></ol>
<ul><li>mkay</li></ul>

<script type="text/javascript">
    var items, contextNode, item;

    items = document.evaluate('//ol', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

    contextNode = items.snapshotItem(0);

    alert(contextNode);

    items = document.evaluate('//li', contextNode, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    alert(items.snapshotLength);
    item = items.snapshotItem(0);

</script>
</body>

De alerts geven resp. een OL object (zoals verwacht), en daarna een '2'; wat ik juist niet verwacht. Ik verwacht daar een 1.

Wat doe ik verkeerd? Is de contextNode niet het startpunt van de expression?

Getest in firefox en safari, beide geven hetzelfde resultaat

[ Voor 4% gewijzigd door chem op 18-09-2006 15:26 ]

Klaar voor een nieuwe uitdaging.


  • Dnomaid
  • Registratie: Augustus 2003
  • Laatst online: 09-02 17:18
Of je nu document of contextNode aan je evaluate methode meegeeft maakt niet uit, ik geloof dat xpath daar simpelweg uit breekt. Probeer je xpath-expressie daarom aan te passen.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 12-02 10:41

chem

Reist de wereld rond

Topicstarter
Mjah, ik wil het echt zeker weten :)
Ik weet wel een kazige work-around, maar dat is niet waar ik naar op zoek ben echt...

Klaar voor een nieuwe uitdaging.


  • Dnomaid
  • Registratie: Augustus 2003
  • Laatst online: 09-02 17:18
Het "uitbreek"-probleem dat je hebt is te wijten aan jou xpath-expressie die je begint met "//", dat impliceert net dat je heel het document gaat doorzoeken. Probeer eens met een enkele "/", daar zou je al veel verder mee kunnen komen ;)

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 12-02 10:41

chem

Reist de wereld rond

Topicstarter
Jah dat had een collega ook uitgevonden; maar met een / wordt het ook niks, het moet dan helemaal zonder /'s zijn; maar ook dat levert nog niet echt op wat ik wil (in een uitgebreidere context).

Ik kom er nog op terug :)

Klaar voor een nieuwe uitdaging.


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 12-02 10:41

chem

Reist de wereld rond

Topicstarter
De juiste syntax is dan:
JavaScript:
1
items = document.evaluate('.//li', contextNode, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 

Let op de punt voor de dubbele slashes.

Opgelost dus vooralsnog \o/

Klaar voor een nieuwe uitdaging.

Pagina: 1