本文介紹了使用JAXB解析包含<;g:id>;等元素的XML文檔的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
<?xml version="1.0"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>SSS Product Feed</title>
<link>https://en-ae.sssports.com/</link>
<description><![CDATA[The largest sports ]]></description>
<item>
<g:id>NIKE315122-001</g:id>
<g:title><![CDATA[Nike Air Force 1 Low 07 Shoe]]></g:title>
<g:sport>Lifestyle</g:sport>
</item>
<item>
<g:id>NIKE315122-002</g:id>
<g:title><![CDATA[Nike Air Force 1 Low 07 Shoe]]></g:title>
<g:sport>Lifestyle</g:sport>
</item>
</channel>
</rss>
這是我要讀取和分析的示例XML文件…
我有這樣的Java類(lèi)…
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Rss {
@XmlElement(name="channel")
private Channel channel;
public Channel getChannel() {
return channel;
}
public void setChannel(Channel channel) {
this.channel = channel;
}
}
另一個(gè)類(lèi)是
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="item")
public class Item {
@XmlElement(name="g:id")
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
,最后一個(gè)Item類(lèi)是
public class Channel {
private List<Item> itemList;
@XmlElement(name="item")
public List<Item> getItemList() {
return itemList;
}
public void setItemList(List<Item> itemList) {
this.itemList = itemList;
}
}
這就是我正在嘗試做的事情..請(qǐng)幫助我做錯(cuò)了什么,因?yàn)槲覐腦ML中提取的所有值都返回空…..
推薦答案
您的Rss
和Channel
類(lèi)在我看來(lái)還可以。
問(wèn)題出在Item
類(lèi)中,尤其是其具有命名空間的元素中。
為<g:id>
元素建模時(shí),不得使用@XmlElement(name = "g:id")
。
相反,您需要使用@XmlElement(name = "id", namespace = "http://base.google.com/ns/1.0")
。
這與XML文件中給定的命名空間定義xmlns:g="http://base.google.com/ns/1.0"
相對(duì)應(yīng)。
順便說(shuō)一句:@XmlRootElement
類(lèi)上不需要@XmlRootElement
。
您只需要在Rss
類(lèi)上使用它,因?yàn)?code><rss>是XML根元素。
完整的Item
類(lèi)如下所示:
@XmlAccessorType(XmlAccessType.FIELD)
public class Item {
@XmlElement(name = "id", namespace = "http://base.google.com/ns/1.0")
private String id;
@XmlElement(name = "title", namespace = "http://base.google.com/ns/1.0")
private String title;
@XmlElement(name = "sport", namespace = "http://base.google.com/ns/1.0")
private String sport;
// public getters and setters (omitted here for brevity)
}
您可以在此處找到更多背景信息:
XML Namespaces大體
OracleJAXB tutorial一般用于JAXB
@Xml...
annotations的Javadoc
有關(guān)更多信息,只需在Internet上搜索JAXB教程命名空間
這篇關(guān)于使用JAXB解析包含<;g:id>;等元素的XML文檔的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,