簡體   English   中英

Java XML解析問題

[英]Java XML parsing issue

我正在嘗試解析此java XML http://www.bnr.ro/nbrfxrates.xml ,我想提取所選貨幣的匯率,這是我到目前為止所做的,並且無法正常工作...可以您告訴我什么正確的方法來獲得貨幣匯率並在交換機內部打印出來? ps:使用以下命令加載xml:

public static void main(String[] args) throws SAXException, IOException  {
    URL oracle = new URL("http://www.bnr.ro/nbrfxrates.xml");
    URLConnection yc = oracle.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(
                            yc.getInputStream()));
    String inputLine;
    while ((inputLine = in.readLine()) != null) 
        System.out.println(inputLine);
    in.close();





Scanner keyboard = new Scanner(System.in);
    System.out.println("What currency rate do you need?");
    String myString;
    myString = keyboard.nextLine();
    System.out.println("myint: " + myString);

    String ales = myString;

    switch(ales ){
        case "USD":
           final Pattern pattern = Pattern.compile("<Rate>(.+?)</Rate>");
           final Matcher matcher = pattern.matcher("<Rate></Rate>");
            matcher.find();
            System.out.println(matcher.group(1));

            break;


        default:
            System.out.println("We don't know");

如果沒有XML解析,則可以將代碼更改為以下內容-這將僅基於正則表達式提取正確的貨幣:

import java.net.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;

public class currency {
public static void main(String[] args) throws Exception  {
    URL oracle = new URL("http://www.bnr.ro/nbrfxrates.xml");
    URLConnection yc = oracle.openConnection();
    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw);
    BufferedReader in = new BufferedReader(new InputStreamReader(
                            yc.getInputStream()));
    String inputLine;
    while ((inputLine = in.readLine()) != null) { 
        System.out.println(inputLine);
        pw.println(inputLine);
    }
    in.close();
    pw.close();
    sw.close();

    String data = sw.toString();

    Scanner keyboard = new Scanner(System.in);
    System.out.println("What currency rate do you need?");
    String myString;
    myString = keyboard.nextLine();
    keyboard.close();
    System.out.println("myint: " + myString);

    String ales = myString;

    Pattern pattern = Pattern.compile("<Rate currency=\""+ales+"\">(.+?)</Rate>");
    Matcher matcher = pattern.matcher(data);
    matcher.find();
    System.out.println(matcher.group(1));
    System.out.println(Double.valueOf(matcher.group(1)));
  }
}

將XML保留為字符串並不是實現此目的的最佳方法-正則表達式解析也是如此。

但是您可以嘗試從那里進行優化。 像:將貨幣放入地圖中,然后用於進一步處理:

Map<String,Double> currencies = new HashMap<String,Double>();
    Pattern pattern = Pattern.compile("<Rate currency=\"([^\"]{3})\">(.+?)</Rate>");
    Matcher matcher = pattern.matcher(data);
    int pos = 0;
    while(matcher.find(pos)) {
      System.out.println("Found: " + matcher.group(1) + ": " + Double.valueOf(matcher.group(2)));
      currencies.put(matcher.group(1), Double.valueOf(matcher.group(2)));
      pos = matcher.end();
    }

    Scanner keyboard = new Scanner(System.in);

    boolean ok = true;
    while(ok) {
      System.out.println("What currency rate do you need? (QUIT to quit)");
      String cur = keyboard.nextLine();
      System.out.println("Rate for " + cur + " is " + currencies.get(cur));
      if("QUIT".equalsIgnoreCase(cur)) {
        ok = false;
      }
    }    
    keyboard.close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM