簡體   English   中英

使用Java JAXB提取XML值

[英]XML Value extraction using Java JAXB

在以下情況下,我需要幫助。 我有一個XML字符串響應。 在該XML響應中,我需要提取三個值。 我無法實現。 我已經指定了XML響應和所需的值。 我也使用pojo一行工具創建了一組.java文件。

   My XML Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
  <control>
        <status>success</status>
        <senderid>XXXXX</senderid>
        <controlid>ControlIdHere</controlid>
        <uniqueid>false</uniqueid>
        <dtdversion>3.0</dtdversion>
  </control>
  <operation>
        <authentication>
              <status>success</status>
              <userid>XXXXX1</userid>
              <companyid>XXXXX</companyid>
              <sessiontimestamp>2014-08-22T07:12:37-07:00</sessiontimestamp>
        </authentication>
        <result>
              <status>success</status>
              <function>readByQuery</function>
              <controlid>testControlId</controlid>
              <data listtype="customer" count="100" totalcount="5142" numremaining="5042">
                    <customer>
                     <name>A</name>
         <id>12</id>
                    </customer>
                    <customer>
                     <name>A</name>
         <id>12</id>
                    </customer>
                    <customer>
                     <name>A</name>
         <id>12</id>
                    </customer>
              </data>
        </result>
  </operation>

在此XML響應中,我需要以下值

像count = 100,totalcount = 5142

我的對象類是這樣的

public class Data {
private String totalcount;
private Sodocument[] sodocument;
private String numremaining;
private String count;
private String listtype;
public String getTotalcount ()
{
    return totalcount;
}

public void setTotalcount (String totalcount)
{
    this.totalcount = totalcount;
}

public Sodocument[] getSodocument ()
{
    return sodocument;
}

public void setSodocument (Sodocument[] sodocument)
{
    this.sodocument = sodocument;
}

public String getNumremaining ()
{
    return numremaining;
}

public void setNumremaining (String numremaining)
{
    this.numremaining = numremaining;
}

public String getCount ()
{
    return count;
}
}


  XMLInputFactory xif = XMLInputFactory.newFactory();
  Reader reader = new StringReader(response.toString());
  XMLStreamReader xsr = xif.createXMLStreamReader(reader);
  JAXBContext jc = JAXBContext.newInstance(Data.class);
  Unmarshaller unmarshaller = jc.createUnmarshaller();
  Data jb = unmarshaller.unmarshal(xsr,Data.class).getValue();
  System.out.println(jb.getCount());

這是我的JAXB類。 對於值getCount給我空響應。 有人可以幫我解決這個問題嗎?

生成的類太長了,無法粘貼到這里,但是您可以嘗試以下操作:

1)使用freeformatter.com/xsd-generator.html從您的xml生成xsd。 將生成的xsd復制並粘貼到文件中。

2)使用xjc (jdk安裝附帶)來生成java類。 它是一個命令行工具,您只需要運行“ xjc generate.xsd”,它將生成您的類的帶注釋的版本。 生成的文件將用於整個xml響應-因此您的類實際上將是Response.java,而不是Data.java,然后您可以深入研究Data元素及其屬性。

添加以下注釋:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Data {
    @XmlAttribute
    private String totalcount;
    @XmlElement
    private Sodocument[] sodocument;
    @XmlAttribute
    private String numremaining;
    @XmlAttribute
    private String count;
    @XmlAttribute
    private String listtype;
    ...

但是請注意,Sodocument [] sodocument(應為列表!)與<customer>不匹配。 不確定模型是什么-也可能是另一個元素(取決於listtype!)

暫無
暫無

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

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