[英]parse xml string using jaxb
我正在嘗試使用jaxb解析xml字符串。 實際上,我需要提取文字中的十進制值。
那是XML字符串:
<results>
<result>
<binding name="value">
<literal datatype="http://www.w3.org/2001/XMLSchema#decimal">369.0</literal>
</binding>
</result>
</results>
我有一個java類的結果:
package client;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Results {
@XmlElement
String result;
@XmlElement
Double binding;
@XmlElement
Double literal;
public Double getLiteral()
{
return literal;
}
public Double geBinding()
{
return binding;
}
public String getResult()
{
return result;
}
}
當我嘗試打印該值時,我得到的是null。那么如何獲取文字標記之間的十進制值?
Results re=(Results) JAXBContext.newInstance(Results.class)
.createUnmarshaller()
.unmarshal(new StringReader(my_xml));
System.out.println(re.getLiteral());
您的Results類無法反映您要解析的XML的結構。 results
元素由一個result
元素組成, result
元素又由binding
組成,並且由literal
組成。
要通過JAXB做到這一點,我們必須遵循類似的結構。
@XmlRootElement
public class Results {
@XmlElement
Result result;
public Result getResult() {
return result;
}
}
public class Result {
@XmlElement
Binding binding;
public Binding getBinding() {
return binding;
}
}
public class Binding {
@XmlElement
Double literal;
public Double getLiteral() {
return literal;
}
}
要訪問literal
的值,我們可以將getter稱為results.getResult().getBinding().getLiteral()
。
但是,如果這是一次性事件,並且您的應用程序不會大量處理XML,則可以考慮使用XPath 。
簡化代碼的一種方法是使用MOXy
的EclipseLink's JAXB
和XmlPath
注釋允許提供一個XPATH
,這樣你可以直接映射元素或屬性內容,你的領域允許以避免對每個子元件的額外類。
例如,在您的情況下,映射將為:
@XmlPath("result/binding/literal/text()")
Double literal;
您將需要將此依賴項添加到您的項目中:
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.3</version>
</dependency>
並通過在啟動命令-Djavax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
設置的系統屬性來明確指定要使用的上下文工廠。
這是一篇有關MOXy
的好文章,描述了如何使用其功能簡化代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.