下面的XML代码:
<?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book><book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book></bookstore>下面的代码:
NodeList list = (NodeList)path.evaluate("//title[last()]", doc,XPathConstants.NODESET);
System.out.println(list.getLength());
上面的代码会输出2??? 为什么呢?last() 没起到作用??还有 position() 这个怎么用?我试用了一下,好像 一点作用都没有啊?
谢谢回答!

解决方案 »

  1.   

    XPATH没有怎么看过,说错了不要怪我
     NodeList list = (NodeList)path.evaluate("//title[last()]", doc,XPathConstants.NODESET); 
    ->
     Node node= (Node)path.evaluate("//title[last()]", doc,XPathConstants.NODE);
    一个节点应该这么取吧?
     
    <?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book>
      <title lang="eng">Harry Potter</title>
      <price>29.99</price>
    </book><book>
      <title lang="eng">Learning XML</title>
      <price>39.95</price>
    </book><book>
      <title lang="eng">Squall</title>
      <price>39.95</price>
    </book></bookstore>position()
    NodeList list = (NodeList)path.evaluate("//title[position()<3]", doc,XPathConstants.NODESET); 
     
      

  2.   

    \\title定位到两个节点 自然是两个了
      

  3.   

    这样定位
    "//book[1]/title[last()]"
    就是1个了
      

  4.   

    //BBB[position() mod 2 = 0 ]
    上表偶数位元素
      

  5.   

    回二楼。如果我那么取正确的话,就算类型是NODESET,那返回的nodelist里也应该只有一个元素啊
    回 dracularking :
    //title 是匹配到了两个
    可是后面不是用[last()]取最后一个了么?
    那为什么返回的nodelist里还是两个节点?
      

  6.   

    还有,为啥我这么用position()取不到 "Learning XML" ?
    System.out.println(path.evaluate("//title[position() = 2]/text()", doc));如果改成position() = 1
    却能拿到harry potter
      

  7.   

    你的last()和position()用的地方不对,还有//title[position()=2]/text() 能拿到harry potter吗?
      

  8.   

    因为每一个book节点下只有一个title子结点
    //book//title返回的是两个book节点下的title节点,你再区last()和position=1是一样的,因为他只有
    一个,但是你这样用last()方法就可以得到预期的效果,如//book[last()]得到是
    <book>
      <title lang="eng">Learning XML</title>
      <price>39.95</price>
    </book>
      

  9.   

    "//title[last()]"
    匹配到了两个book块中的last title
    所谓last 只是对亲生兄弟而言的
      

  10.   

    XPATH好像不属性DOM也不属性SAX的吧?
    结贴了。谢谢各位回答!