2016-10-26 2 views
0

У меня есть xml, как показано ниже.Java Xpath несколько элементов с одинаковым именем родительского узла

<name> 
<value>123</value> 
<value>456</value> 
<value>789</value> 
</name> 

Теперь, используя Xpath запрос Java, я пытался ниже метод

NodeList list3 = (NodeList) xpath.evaluate("name/value", element,XPathConstants.NODESET); 

Но это дает мне только первое значение, как я могу печатать все <value> теги?

ответ

1

Ваше выражение XPath верное, в вашем коде есть, скорее всего, другая проблема. Вы действительно должны предоставить полный пример, который демонстрирует вашу проблему.

Следующий код демонстрирует, как это будет выглядеть следующим образом:

import java.io.StringReader; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

public class XmlTest { 

    public static void main(String[] args) throws Exception { 
     String xml = "<name>\n" + 
       "<value>123</value>\n" + 
       "<value>456</value>\n" + 
       "<value>789</value>\n" + 
       "</name>"; 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(new InputSource(new StringReader(xml))); 
     XPathFactory xPathfactory = XPathFactory.newInstance(); 
     XPath xpath = xPathfactory.newXPath(); 
     NodeList list = (NodeList) xpath.evaluate("name/value", doc, XPathConstants.NODESET); 

     for (int i = 0; i < list.getLength(); ++i) { 
      Node node = list.item(i); 
      System.out.println(node.getNodeName()); 
     } 
    } 

} 

Запуск это результаты в следующие выходные:

value 
value 
value 
+0

Спасибо. Я хочу напечатать значения этих тегов. Я попытался с этим node.getNodeValue()); но получение нулевого значения –

+0

В любом случае, мне удалось получить значения с помощью узла Node = list3.item (i); \t node.getFirstChild(). GetNodeValue(); –

+0

@ serverliving.com Используйте 'имя/значение/текст()' для выражения XPath. – Markus

Смежные вопросы