Java 如何使用未排序的元素解析XML?
如何使用Jackson将包含未排序元素的XML(请参阅)解析为以下JavaBean 问题是当前的实现只能解析第一个“str”和“arr”元素,并将它们添加到DocBean下的相应集合中。但是,这些元素的所有进一步出现都将被忽略。我敢打赌,这是因为“str”和“arr”元素并没有“阻塞在一起” XML(结果元素可能包含*doc元素):Java 如何使用未排序的元素解析XML?,java,xml,annotations,jackson,javabeans,Java,Xml,Annotations,Jackson,Javabeans,如何使用Jackson将包含未排序元素的XML(请参阅)解析为以下JavaBean 问题是当前的实现只能解析第一个“str”和“arr”元素,并将它们添加到DocBean下的相应集合中。但是,这些元素的所有进一步出现都将被忽略。我敢打赌,这是因为“str”和“arr”元素并没有“阻塞在一起” XML(结果元素可能包含*doc元素): 请发布一个示例输入xml文本(不是图片!)更新了问题,xml文件已被附加。我打赌这是因为“str”和“arr”元素没有“阻塞在一起”……您测试过这个理论吗?如果是这
请发布一个示例输入xml文本(不是图片!)更新了问题,xml文件已被附加。我打赌这是因为“str”和“arr”元素没有“阻塞在一起”……您测试过这个理论吗?如果是这样,为什么不在处理之前对XML进行排序呢?是的,我已经测试过了。如何在没有任何解析/读取能力的情况下对元素进行排序?
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
<lst name="params">
<str name="fl">id,g,a,v,p,ec,timestamp,tags</str>
<str name="sort">score desc,timestamp desc,g asc,a asc,v desc</str>
<str name="indent">off</str>
<str name="q">1:"e486ad917028b52265610206fb5a1e2b5914b94b"</str>
<str name="wt">xml</str>
<str name="version">2.2</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<str name="a">xmlrpc-client</str>
<arr name="ec">
<str>-sources.jar</str>
<str>-javadoc.jar</str>
<str>.jar</str>
<str>.pom</str>
</arr>
<str name="g">org.apache.xmlrpc</str>
<str name="id">org.apache.xmlrpc:xmlrpc-client:3.1.3</str>
<str name="p">jar</str>
<arr name="tags">
<str>handle</str>
<str>apache</str>
<str>remote</str>
<str>extensions</str>
<str>version</str>
<str>simpler</str>
<str>over</str>
<str>compared</str>
<str>implement</str>
<str>procedure</str>
<str>protocol</str>
<str>vendor</str>
<str>easier</str>
<str>important</str>
<str>introduces</str>
<str>calls</str>
<str>stable</str>
<str>much</str>
<str>that</str>
<str>http</str>
<str>implementation</str>
<str>popular</str>
<str>specification</str>
<str>original</str>
<str>several</str>
<str>java</str>
<str>uses</str>
<str>soap</str>
</arr>
<long name="timestamp">1265472806000</long>
<str name="v">3.1.3</str>
</doc>
</result>
</response>
@JacksonXmlRootElement(localName = "response")
public class MVNSearch {
@JacksonXmlProperty(localName = "doc")
@JacksonXmlElementWrapper(localName = "result")
private List<MVNSearchDoc> docs;
public List<MVNSearchDoc> getDocs() {
return docs;
}
public void setDocs(List<MVNSearchDoc> docs) {
this.docs = docs;
}
}
public class MVNSearchDoc {
@JacksonXmlProperty(localName = "str")
@JacksonXmlElementWrapper(useWrapping = false)
private List<MVNSearchStr> strs;
@JacksonXmlProperty(localName = "arr")
@JacksonXmlElementWrapper(useWrapping = false)
private List<MVNSearchArr> arrs;
@JacksonXmlProperty(localName = "long")
private MVNSearchLong timestamp;
public List<MVNSearchStr> getStrs() {
return strs;
}
public void setStrs(List<MVNSearchStr> strs) {
this.strs = strs;
}
public List<MVNSearchArr> getArrs() {
return arrs;
}
public void setArrs(List<MVNSearchArr> arrs) {
this.arrs = arrs;
}
public MVNSearchLong getTimestamp() {
return timestamp;
}
public void setTimestamp(MVNSearchLong timestamp) {
this.timestamp = timestamp;
}
}
public class MVNSearchStr {
@JacksonXmlProperty(isAttribute = true)
private String name;
@JacksonXmlText
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}