| <body> | |
| <script> | |
| if (window.testRunner) | |
| testRunner.dumpAsText(); | |
| src = '<doc><elem>a<![CDATA[b]]>c</elem></doc>'; | |
| doc = (new DOMParser).parseFromString(src, "application/xml"); | |
| elem = doc.documentElement.firstChild; | |
| aText = elem.firstChild; | |
| bText = elem.firstChild.nextSibling; | |
| cText = elem.lastChild; | |
| function test(expr, context) { | |
| nodeset = doc.evaluate(expr, context, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); | |
| str = ""; | |
| while (currNode = nodeset.iterateNext()) { | |
| if (str) | |
| str += " "; | |
| str += currNode.nodeValue; | |
| } | |
| document.write(expr + ", " + (context.nodeValue ? context.nodeValue : context) + ": \"" + str + "\"<br>"); | |
| } | |
| document.write("<xmp>" + src + "</xmp>"); | |
| test("child::*", elem); | |
| test("child::node()", elem); | |
| test("descendant::*", elem); | |
| test("descendant::node()", elem); | |
| test("descendant::node()[2]", elem); | |
| test("ancestor-or-self::node()", bText); | |
| test("ancestor-or-self::*", bText); | |
| test("ancestor-or-self::node()", aText); | |
| test("ancestor-or-self::*", aText); | |
| test("following::node()", elem); | |
| test("following::node()", aText); | |
| test("following::text()", aText); | |
| test("following::node()", bText); | |
| test("following-sibling::node()", elem); | |
| test("following-sibling::node()", aText); | |
| test("following-sibling::text()", aText); | |
| test("following-sibling::node()", bText); | |
| test("preceding::node()", bText); | |
| test("preceding-sibling::node()", bText); | |
| test("preceding::node()", cText); | |
| test("preceding::text()", cText); | |
| test("preceding-sibling::node()", cText); | |
| test("preceding-sibling::text()", cText); | |
| test("self::node()", bText); | |
| </script> | |
| </body> |