2012-04-11 112 views
0

了迭代的节点的XPath的价值我有一个XML掌握在Java中

<?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> 
DocumentBuilderFactory domFactory = DocumentBuilderFactory 
       .newInstance(); 
     domFactory.setNamespaceAware(true); 
     DocumentBuilder builder = domFactory.newDocumentBuilder(); 
     Document doc = builder.parse("persons.xml"); 
     XPath xpath = XPathFactory.newInstance().newXPath(); 
     // XPath Query for showing all nodes value 
     XPathExpression expr = xpath.compile("//information/person[0]/name/text()"); 

     Object result = expr.evaluate(doc, XPathConstants.NODE); 
     Node node = (Node) result; 
     System.out.println(node.getNodeValue()); 

,我需要提取的第一人我想上面的代码名称它给例外任何一个可以帮我在这,

修订 异常

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) 

修订ANSWER

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

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

     System.out.println(str); 
+1

什么异常? – McDowell 2012-04-11 18:12:50

+1

拉梅什,假设我去看了医生,说:“我觉得恶心,但我不会告诉你我的症状,你能帮我吗?” – LarsH 2012-04-11 18:48:18

+0

对不起,不提供例外。我已经更新了这个问题,请看看 – Ramesh 2012-04-12 04:06:37

回答

1

的XPath索引开始在基地1个,不为0,因为大多数会认为,这样的人[0]将不会返回任何东西。 您的XPath更改为//information/person[1]/name/text() 你也可以指定避免简单地完全使用静态数字的位置://information/person[position()=1]/name/text()

//information/person[@id='1']/name/text()如果通过ID需要它。

+1

[1]只是[position()= 1]的简写。它不像“数组索引”那样索引。 – 2012-04-11 18:49:38

+0

你说得对,这是一个节点列表,而不是一个数组,position()与数组中的索引不同。我们不使用阵列好事;) – JWiley 2012-04-11 19:09:29

+0

@jdwilemo:我认为,马尔科是在回应你的说法:“你也可以指定完全避免索引的位置”。他的观点是你没有避免任何事情......''[1]'和'[position()= 1]'完全相同。 – LarsH 2012-04-12 17:06:13

1

XPathExpression EXPR = xpath.compile( “//信息/人[1] /名称”);

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

    System.out.println(str);