2015-07-10 2 views
1

для нижеследующего XML-файла, я хочу получить значения идентификаторов, соответствующих лат = 53.0337395, а в xml есть два идентификатора с lat = 53.0337395. как показано ниже, для достижения этой цели я написал код, приведенный ниже, но во время выполнения я получаю #NUMBER cannt be converted into a nodelistКак получить значения атрибутов в nodelist

пожалуйста, дайте мне знать, как решить это

String expr0 = "count(//node[@lat=53.0337395]//@id)"; 
xPath.compile(expr0); 
NodeList nodeList = (NodeList) xPath.compile(expr0).evaluate(document, 
XPathConstants.NODESET); 
System.out.println(nodeList.getLength()); 

XML:

<?xml version='1.0' encoding='utf-8' ?> 
<osm> 
<node id="25779111" lat="53.0334062" lon="8.8461545"/> 
<node id="25779112" lat="53.0338904" lon="8.846314"/> 
<node id="25779119" lat="53.0337395" lon="8.8489255"/> 
<tag k="maxspeed" v="30"/> 
<tag k="maxspeed:zone" v="yes"/> 
<node id="25779111" lat="53x.0334062" lon="8x.8461545"/> 
<node id="25779112" lat="53x.0338904" lon="8x.846314"/> 
<node id="257791191" lat="53.0337395" lon="8x.8489255"/> 
<tag k="maxspeed" v="30x"/> 
<tag k="maxspeed:zone" v="yes"/> 
</osm> 
+2

'Строка expr0 =«Количество (//node[@lat=53.0337395] // @ id) ";' должен возвращать 2 в вашем случае, и вы говорите, что 2 должен быть nodeList –

ответ

1

I Не знаю, почему вы используете count(), если хотите получить список узлов (count() собирается вернуть номер, а не список). Попробуйте вместо этого:

String expr0 = "/osm/node[@lat=53.0337395]/@id"; 
NodeList nodeList = (NodeList) xPath.compile(expr0).evaluate(document, 
                  XPathConstants.NODESET); 
System.out.println(nodeList.getLength()); 

Вот полный компилируемый пример использования файла XML в качестве входных данных:

import java.io.File; 
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.NodeList; 

public class IdFinder 
{ 
    public static void main(String[] args) 
      throws Exception 
    { 
     File fXmlFile = new File("C:/Users/user2121/osm.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document document = dBuilder.parse(fXmlFile); 

     XPath xPath = XPathFactory.newInstance().newXPath(); 

     String expr0 = "/osm/node[@lat=53.0337395]/@id"; 
     NodeList nodeList = (NodeList) xPath.compile(expr0).evaluate(document, XPathConstants.NODESET); 

     System.out.println("Matches: " + nodeList.getLength()); 
     for (int i = 0; i < nodeList.getLength(); i++) { 
      System.out.println(nodeList.item(i).getNodeValue()); 
     } 
    } 
} 

Выход этого:

 
Matches: 2 
25779119 
257791191 
Смежные вопросы