使用SimpleXml解析xml数据<三>
前两篇博客介绍了一些基本xml解析。
不过在使用过程中我们有可能也会遇到比较变态的xml,这篇博客主要讲讲怎么解析稍微不正常一点的xml。
第一种:
<Bean xmlns:soap="http://www.w3.org/2001/XMLSchema-instance">
<soap:value>123</soap:value>
</Bean>
这种相对还是比较简单的,在Element上面配置一下namespace的prefix属性的值就可以了。
对应的Bean.java 如下:
@Root
public class Bean {
@Namespace(prefix = "soap")
@Element
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
@Override
public String toString() {
return "Bean{" +
"value=" + value +
'}';
}
}
通过Element注解的name属性我们能够把原本xml中的名字,在java文件中重新命名。
第二种:
<Bean xmlns:im="http://www.w3.org/2001/XMLSchema-instance">
<im:image height="170">111</im:image>
</Bean>
首先呢,这种和第一种是很类似的,但多了一个height属性。
这种应该怎么解析呢,其实也很简单,这种的话,每一个<im:image height="170">111</im:image>
相当于一个对象。
height是attribute。
有了这个思路,解析起来就简单很多了吧。
对应Bean.java如下:
@Root
public class Bean {
@Namespace( prefix = "im")
@Element(name = "image")
private Image image;
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
@Override
public String toString() {
return "Bean{" +
"image=" + image +
'}';
}
static class Image{
@Attribute
private int height;
@Text()
private int value;
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
@Override
public String toString() {
return "Image{" +
"height=" + height +
", value=" + value +
'}';
}
}
}
第三种:
<Bean xmlns:im="http://www.w3.org/2001/XMLSchema-instance">
<xx im:image="170">111</xx>
</Bean>
如果你看完了前两种,这种相信应该难不倒你了,只是把prefix转移到Attribute上面而已,就不多说了,直接贴代码:
@Root
public class Bean {
@Element(name = "xx")
private XX xxx;
public XX getXxx() {
return xxx;
}
public void setXxx(XX xxx) {
this.xxx = xxx;
}
@Override
public String toString() {
return "Bean{" +
"xxx=" + xxx +
'}';
}
static class XX{
@Namespace( prefix = "im")
@Attribute(name = "image")
private int image;
@Text()
private int value;
public int getImage() {
return image;
}
public void setImage(int image) {
this.image = image;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
@Override
public String toString() {
return "XX{" +
"xxx=" + image +
", value=" + value +
'}';
}
}
}
解析结果:Bean{xxx=XX{xxx=170, value=111}}