簡體   English   中英

使用jaxb解析xml字符串

[英]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

簡化代碼的一種方法是使用MOXyEclipseLink's JAXBXmlPath注釋允許提供一個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.

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