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形式。 展开
属性 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形式。 展开
1个回答
展开全部
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;
}
}
主要就是用了递归,然后反射取字段的名字和值
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询