2014-11-24 59 views
0

我試圖讀取遠程XML文件的「release」標記的值並返回它的值。我可以使用getElementText()函數找到「release」標記的值。但不被getElementValue()使用java獲取XML標記的價值

Java代碼的..

try { 
URL url1 = new URL("http://hsv-artifactory.emrsn.org:8081/artifactory/libs-release-local/com/avocent/commonplatform/cps/symbols/gdd/GDDResources/maven-metadata.xml"); 
XMLStreamReader reader1 = XMLInputFactory.newInstance().createXMLStreamReader(url1.openStream()); 
String Latest = null; 
while (reader1.hasNext()) { 
    if (reader1.next() == XMLStreamConstants.START_ELEMENT) { 
     if (reader1.getLocalName().equals("release")) { 
      Latest = reader1.getElementText(); 
      break; 
     } 
    } 
} 
System.out.println("Latest version in Artifactory is :"+Latest); 
} catch (IOException ex) { 
// handle exception 
Logger.getLogger(SVNRepoConnector1.class.getName()).log(Level.SEVERE, null, ex); 
} catch (XMLStreamException ex) { 
// handle exception 
Logger.getLogger(SVNRepoConnector1.class.getName()).log(Level.SEVERE, null, ex); 
} finally { 
// close the stream 

     } 

在上面的代碼的值被存儲在一個字符串變量,但我想將其存儲在一個整數變量,這樣我可以執行操作如加法,減法後..請幫助

+0

我建議你從「增加值」部分中分離出「在XML中找到值」......這樣你就可以一次處理一件事情。如果增量部分是給你帶來麻煩的東西,你不需要*任何* XML代碼來處理它......你只需要一個方法,比如'String incrementValue(String existingValue)'。然後你可以很容易地寫出一堆單元測試... – 2014-11-24 11:45:59

+0

變量和方法名應該是小寫 – MihaiC 2014-11-24 13:42:34

+1

幫你一個忙,並使用DOM解析器。 – eckes 2014-11-25 03:18:44

回答

0

DOM解決方案:

URL url1 = new URL("http://hsv-artifactory.emrsn.org:8081/artifactory/libs-release-local/com/avocent/commonplatform/cps/symbols/gdd/GDDResources/maven-metadata.xml"); 
InputSource xmlInputSource = new InputSource(url1.openStream()); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document dom = dBuilder.parse(xmlInputSource); 
XPathFactory xPathfactory = XPathFactory.newInstance(); 
XPath xpath = xPathfactory.newXPath(); 
XPathExpression expr = xpath.compile("//release");//all release elements 
NodeList nodes = (NodeList) expr.evaluate(e,XPathConstants.NODESET); 
ArrayList<Integer> releaseList = new ArrayList<Integer>(); 
for (int i = 0; i < nodes.getLength(); i++) { 
    Element releaseElem = (Element) nodes.item(i); 
    releaseList.add(Integer.parseInt(releaseElem.getText())); 
} 

只是發現異常。