在java中获取节点的xpath值而不进行迭代

在java中获取节点的xpath值而不进行迭代,java,xpath,Java,Xpath,我有一个xml <?xml version="1.0" encoding="UTF-8"?> <information> <person id="1"> <name>Deep</name> <age>34</age> <gender>Male</gender> </person> <person id="2"> <name>K

我有一个xml

<?xml version="1.0" encoding="UTF-8"?>
<information>
  <person id="1">
  <name>Deep</name>
  <age>34</age>
  <gender>Male</gender>
  </person>

 <person id="2">
  <name>Kumar</name>
  <age>24</age>
  <gender>Male</gender>
  </person>

  <person id="3">
  <name>Deepali</name>
  <age>19</age>
  <gender>Female</gender>
  </person>

  <!-- more persons... -->
</information>
我需要提取我试过的第一个人的名字上面的代码它给出了一个例外有人能帮我吗

更新 例外情况

Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cast to javax.xml.soap.Node
    at xml.main(xml.java:33)
最新答案

XPathExpression expr = xpath.compile("//information/person[1]/name");

        String str = (String) expr.evaluate(doc, XPathConstants.STRING);

        System.out.println(str);

XPath索引从基1开始,而不是大多数人认为的0,因此person[0]不会返回任何内容。 将XPath更改为
//information/person[1]/name/text()
您还可以指定位置,以避免完全使用静态数字:
//information/person[position()=1]/name/text()


或者
//information/person[@id='1']/name/text()
,如果您需要它的id。

XPathExpression expr=xpath.compile(“//information/person[1]/name”)


Ramesh,假设我去看医生说,“我感觉不舒服,但我不会告诉你我的症状。你能帮我吗?”很抱歉没有提供例外情况。我已经更新了问题,请看一看你用“更新的答案”更新了你的问题。这是否意味着你的问题已经得到了回答,或者你仍然需要帮助?回答自己问题的正常方式是在页面底部填写新答案,而不是编辑问题。[1]只是[position()=1]的简写。它不是“数组索引”中的索引。没错,这是一个节点列表,不是数组,position()与数组中的索引不同。幸好我们没有使用数组;)@jdwilemo:我认为Marko是对您的陈述的回应,“您还可以指定位置以避免完全索引”。他的意思是你没有回避任何事情<代码>[1]
[position()=1]
完全相同。明白了。我想我的意思是“索引”,即在position函数上使用静态数值来指定节点位置。我主要想向Ramesh和其他人展示检索节点的不同方式,因为如果不使用position()ex:(person[1>=]),就无法对范围应用运算符,所以我想同时显示person[1]和person[position()=1]
XPathExpression expr = xpath.compile("//information/person[1]/name");

        String str = (String) expr.evaluate(doc, XPathConstants.STRING);

        System.out.println(str);
    String str = (String) expr.evaluate(doc, XPathConstants.STRING);

    System.out.println(str);