java String类型,转化为XML形式的String类型。

类A:属性a;b;c;d;…………abcd……均为String类型。均有getset方法要求,将abcd……最终转化为StringxmlStr=“<begin><star... 类 A :
属性 a ; b; c; d;………… abcd……均为String类型。 均有get set方法

要求,将abcd……最终转化为 String xmlStr=“<begin><start>“+"<a>a的值</a><b>b的值</b>"+……+”<n>n的值</n></start></begin>“
这种类型的。求方法。

此问题,升级版:类A 的子类 有 A1 A2 A3 A4……A1有属性x;y;z; A2有属性 s p f……等等;

现在要求调用方法 public String toString(A a){输出类的属性值}
来实现,可以输出 A 的属性值 A1的属性值 A2的属性值。
并将其转为为 StringXML形式。
展开
 我来答
charlycong
推荐于2017-09-09 · TA获得超过445个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:291万
展开全部
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class BuildXmlFromProperties {

private String x = "xxxx";
private String y = "yyyy";
private A a;

public static void main(String[] args) {
BuildXmlFromProperties t = new BuildXmlFromProperties();
A a = new A("aXxxxx", "aYyyyy");
B b = new B("abXxxx","abYyyy");
a.setB(b);
t.setA(a);

Document doc = DocumentHelper.createDocument();
Element beginEle = doc.addElement("begin");
Element startEle = beginEle.addElement("start");
t.buildElement(t,"first", startEle);
System.out.println(doc.asXML());
}

public void buildElement(Object obj,String title,Element parentElement){
if(obj.getClass().getName().equals("java.lang.String")){
parentElement.addElement(title).setText(obj+"");

}else{
Element subElement = parentElement.addElement(title);
Field[] fields = obj.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Method method = null;
Object subObj=null;
String subTitle = fields[i].getName();
try {
String methodName = "get"+subTitle.substring(0, 1).toUpperCase()+(subTitle.length()==1?"":subTitle.substring(1));
method = obj.getClass().getDeclaredMethod(methodName, null);
subObj = method.invoke(obj, null);
} catch (Exception e) {

e.printStackTrace();


buildElement(subObj,subTitle,subElement);
}
}
}

public String getX() {
return x;
}

public String getY() {
return y;
}

public A getA() {
return a;
}

public void setX(String x) {
this.x = x;
}

public void setY(String y) {
this.y = y;
}

public void setA(A a) {
this.a = a;
}
}



class A{
private String aX;
private String aY;
private B b;

public A(String aX,String aY){
this.aX = aX;
this.aY = aY;
}
public String getAX() {
return aX;
}
public String getAY() {
return aY;
}
public void setAX(String aX) {
this.aX = aX;
}
public void setAY(String aY) {
this.aY = aY;
}
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
}

class B{
private String abX;
private String abY;
public B(String abX,String abY) {
this.abX = abX;
this.abY = abY;
}

public String getAbX() {
return abX;
}
public String getAbY() {
return abY;
}
public void setAbX(String abX) {
this.abX = abX;
}
public void setAbY(String abY) {
this.abY = abY;
}
}

主要就是用了递归,然后反射取字段的名字和值

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式