我试图弄清楚如何在 Eclipse 中将以下 XML 解析为 Java 类: http://finance.yahoo.com/webservice/v1/symbols/aapl/quote?format=xml&view=detail
我按照 this tutorial 尝试过,但我无法让它工作。
我想要解析名称(Apple Inc.)和价格。 这是我的引用类(使用和不使用注释参数进行了尝试):
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "Quote")
public class Quote implements Serializable {
private String name;
private Integer price;
public String getName() {
return name;
}
@XmlElement(name = "name")
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
@XmlElement(name = "price")
public void setPrice(Integer price) {
this.price = price;
}
这是我的助手类的相关部分,它计划在一组中存储多个引号:
import javax.xml.bind.JAXB;
...
public class QuoteService {
Set<Quote> quotes = new LinkedHashSet<>();
public void initializeQuotes() {
String s = "http://finance.yahoo.com/webservice/v1/symbols/aapl/quote?format=xml&view=detail";
try {
URL url = new URL(s);
Quote quote = JAXB.unmarshal(url, Quote.class);
quotes.add(quote);
}
catch (MalformedURLException e) {
e.printStackTrace();
}
public Set<Quote> getQuotes() {
return quotes;
}
}
执行initializeQuotes()后,我没有得到任何异常。但是,在使用以下代码打印出所有内容后:
System.out.println(quoteService.getQuotes());
for (Quote quote : quoteService.getQuotes()) {
System.out.println(quote.getName());
System.out.println(quote.getPrice());
}
我得到:
[quote.core.api.Quote@e36bb2a]
null
null
因此,显然创建了一个 Quote 类,但其属性(名称和价格)为空,而不包含相应的 XML 值(“Apple Inc.”和当前价格)。 我做错了什么?
最佳答案
如果我访问代码中的 URL,返回的 XML 是一个“列表”对象,该对象包含一个“资源”对象,该对象包含“资源”对象列表。这甚至与您的 Java 对象“Quote”类根本不匹配。
您最好从描述要转换的 XML 的模式开始,然后通过 xjc(XML 到 Java 编译器)运行该模式。这将为您生成适当的带注释的 java 对象,您可以将其传递给 JAXB marshaller/unmarshaller。 (我知道 Netbeans IDE 将为您自动执行运行 xjc 的步骤;其他 IDE 也可能会这样做。)如果您愿意,您可以开始自定义它生成的 java 类 - 但如果以后架构更改,您必须重新生成 java 代码。
现在,就您的情况而言,您是从 XML 开始的,也许您没有架构。但有办法解决这个问题。前往http://www.freeformatter.com/xsd-generator.html并粘贴来自 Yahoo 站点的 XML。这将为您生成一个与您获得的 XML 相匹配的 XML 模式。这应该能让你继续前进。
我针对您发布的网址运行了此操作,并且第一次尝试就成功了。我实际上没有测试解码结果,但它应该可以正常工作。
关于java - 无法让 JAXB 解析来自 Yahoo! 的 XML金融到 java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33619261/