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