2014-03-05 24 views
0

我有以下包含GPS座標的XML文件,我只是想知道如何使用Java中的Xpath提取軌道緯度和經度。到目前爲止,我嘗試過:如何在Java中使用xpath從特定屬性中選擇所有屬性值

System.out.println(xpath.evaluate("/gpx/trk/trkseg/trkpt/@lat", doc)); 

但這隻能檢索第一個值?請有人告訴我如何一次檢索所有的值。

很多預先感謝。

<gpx xmlns="http://www.topografix.com/GPX/1/1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="MapSource 6.11.3" 
version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 
http://www.topografix.com/GPX/1/1/gpx.xsd"> 
<metadata>...</metadata> 
<wpt lat="40.653792" lon="-111.922379">...</wpt> 
<wpt lat="40.658111" lon="-111.919564">...</wpt> 
<wpt lat="40.659546" lon="-111.917527">...</wpt> 
<wpt lat="40.595857" lon="-111.910294">...</wpt> 
<wpt lat="40.657349" lon="-111.918721">...</wpt> 
<trk> 
<name>FromParking</name> 
<extensions>...</extensions> 
<trkseg> 
<trkpt lat="40.653782" lon="-111.922365"> 
    <ele>1224.376221</ele> 
    <time>2009-11-19T20:00:11Z</time> 
</trkpt> 
<trkpt lat="40.653786" lon="-111.922350"> 
    <ele>1223.895508</ele> 
    <time>2009-11-19T20:00:13Z</time> 
</trkpt> 
<trkpt lat="40.654449" lon="-111.922073"> 
    <ele>1224.376221</ele> 
    <time>2009-11-19T20:00:22Z</time> 
</trkpt> 
<trkpt lat="40.654509" lon="-111.921919"> 
    <ele>1224.376221</ele> 
    <time>2009-11-19T20:00:25Z</time> 
</trkpt> 
<trkpt lat="40.654618" lon="-111.921700"> 
    <ele>1224.856934</ele> 
    <time>2009-11-19T20:00:35Z</time> 
</trkpt> 
+0

您使用的是什麼XML/XPath庫? – 2014-03-05 12:30:46

回答

1

除了我在my answer to your previous question描述的命名空間的問題,你的根本問題就在這裏就是XPath.evaluate方法沒有一個QName returnType參數會將XPath表達式評估爲字符串,XPath規則指出包含多個節點的節點集的字符串值爲defined to be t他按照文檔順序設置第一個節點的字符串值。

如果要計算XPath表達式返回一組節點,那麼你必須使用的XPath的方法,這需要一個QName之一,通過XPathConstants.NODESET所請求的返回類型,並把結果從evaluate返回到org.w3c.dom.NodeList其你可以迭代。

0

試試這個:檢索所有trkpt屬性做到這一點:

String trkpt ="/gpx/trk/trkseg/trkpt"; 
NodeList nodeList= (NodeList) xpath.compile(trkpt).evaluate(doc, XPathConstants.NODESET); 

for(int i=0; i<nodeList.getLength(); i++){ 
    Node node = nodeList.item(i); 
    NamedNodeMap attributesMap = node.getAttributes(); 

    for (int j = 0; j< attributesMap.getLength(); j++) {    
    Node attributeNode = attributesMap.item(j);  
    String attributeName = attributeNode.getNodeName();   
    String attributeValue = attributeNode.getNodeValue(); 

    System.out.println(attributeName + "=" + attributeValue); 
    } 
} 
相關問題