各位大神,菜鸟求指点,怎么根据一个xml文件里节点名动态生成一个新的类对象,在线求,谢谢
[quote]
这个我的意思这个类是未知,在解析完XML之后动态创建起来的,
[/quote]
什么叫类未知?不会是说连该类的class文件都没有吧,如果这样,那就没办法了。
如果不是,而只是说有多个类型,在创建是动态选择,那到是可以。你只需要在xml文件中的某个地方配置一下需要转换的类型,比如在上面的例子中,修改:
[code="java"]
[/code]
然后在解析过程中获取该“type”属性,在利用java的反射机制创建该类型的实例(需要先同Class.forName把类加载进来哦),Class.newInstance(),想法就这样,后面具体我就不写了。
用第三方的JAR包啊
比如commons-betwixt-0.8.jar
实例教程
[url]
http://hi.baidu.com/accphc/blog/item/ff1998105728ae0d203f2eea.html
[/url]
你可以自己使用dom4j什么的自己解析试下,也可用用一些第三方的jar
这个很好用,你看
http://lavasoft.blog.51cto.com/62575/64114
jaxb,参考下面连接
[url]http://www.iteye.com/topic/184781[/url]
补充下:
Java/XML binding又可以称为type mapping,它是通过 serializer and a deserializer来实现,serializer将java类的实例转换成XML实例,deserializer则相反。当时binding和 mapping是有区别的。If a Java/XML map sends each Java programming element to a unique XML Schema component (i.e., it defines a function), I call it a Java/XML binding.(因为一个class可能被映射到不同的XML Schema Type)
使用xml的解析工具就可以了,比如dom4j,STax等,然后根据解析的数据构建对象实例就好了。下面我给个使用JAXB的例子:
1、通过xml解析的类:Person
[code="java"]
package xml;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
[/code]
要解析的xml文件:person.xml:
[code="java"]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
34
kyle
[/code]
解析程序:
[code="java"]
package xml;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Writer;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class Converter {
private static final String XML = "C:\\Documents and Settings\\kobe\\workspace\\misc-example\\src\\main\\java\\xml\\person.xml";
public static void main(String[] args) throws Exception {
unmarshall();
}
private static void unmarshall() throws Exception {
JAXBContext jc = JAXBContext.newInstance(Person.class);
Unmarshaller un = jc.createUnmarshaller();
Person event = (Person) un.unmarshal(new FileReader(XML));
System.out.println(event.getName());
}
}
[/code]