xml与类对应起来,类与mapping对应起来。使用castor框架解析,而不是新手教程的for遍历和equals。
展示两种,一种是属性,一种是元素
<?xml version="1.0" encoding="UTF-8"?>
<!--我是注释!包含ommbFtp和数据库模块-->
<module>
<ommbFtp ip="10" port="21" userName="aaa" passWord="bbb" />
<oracleDb>
<ip>10</ip>
<port>1521</port>
<userName>system</userName>
<passWord>nihao</passWord>
<instance>oracle</instance>
</oracleDb>
</module>
package paseXml;
public class Module {
private OmmbFtp ommbFtp;
private OracleDb oracleDb;
public OmmbFtp getOmmbFtp() {
return ommbFtp;
}
public void setOmmbFtp(OmmbFtp ommbFtp) {
this.ommbFtp = ommbFtp;
}
public OracleDb getOracleDb() {
return oracleDb;
}
public void setOracleDb(OracleDb oracleDb) {
this.oracleDb = oracleDb;
}
}
package paseXml;
public class OmmbFtp {
private String ip;
private int port;
private String userName;
private String passWord;
public OmmbFtp(){}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
package paseXml;
public class OracleDb {
private String ip;
private String port;
private String userName;
private String passWord;
private String instance;
public OracleDb(){}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getInstance() {
return instance;
}
public void setInstance(String instance) {
this.instance = instance;
}
}
这里可能会因为大小写什么的出问题,耐心点啦,一点一点检查。
<?xml version="1.0" encoding="UTF-8"?>
<mapping>
<!-- 类paseXml.Module映射
element代表元素;
attribute代表属性
-->
<class name="paseXml.Module">
<!--用 map-to 元素和 xml 属性指定这个类要映射到的 XML 元素 -->
<map-to xml="module" />
<field name="ommbFtp" type="paseXml.OmmbFtp">
<bind-xml name="ommbFtp" node="element"/>
</field>
<field name="oracleDb" type="paseXml.OracleDb">
<bind-xml name="oracleDb" node="element"/>
</field>
</class>
<!-- 类paseXml.OmmbFtp映射 -->
<class name="paseXml.OmmbFtp">
<!--用 map-to 元素和 xml 属性指定这个类要映射到的 XML 元素 -->
<map-to xml="ommbFtp" />
<field name="ip" type="java.lang.String">
<bind-xml name="ip" node="attribute"/>
</field>
<field name="port" type="int">
<bind-xml name="port" node="attribute"/>
</field>
<field name="userName" type="java.lang.String">
<bind-xml name="userName" node="attribute"/>
</field>
<field name="passWord" type="java.lang.String">
<bind-xml name="passWord" node="attribute"/>
</field>
</class>
<!-- 类paseXml.OmmbFtp映射 -->
<class name="paseXml.OracleDb">
<!--用 map-to 元素和 xml 属性指定这个类要映射到的 XML 元素 -->
<map-to xml="oracleDb" />
<field name="ip" type="java.lang.String">
<bind-xml name="ip" node="element"/>
</field>
<field name="port" type="java.lang.String">
<bind-xml name="port" node="element"/>
</field>
<field name="userName" type="java.lang.String">
<bind-xml name="userName" node="element"/>
</field>
<field name="passWord" type="java.lang.String">
<bind-xml name="passWord" node="element"/>
</field>
<field name="instance" type="java.lang.String">
<bind-xml name="instance" node="element"/>
</field>
</class>
</mapping>
castor-1.3-core.jar
castor-1.3-xml.jar
castor-1.3.jar
package paseXml;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import org.apache.log4j.Logger;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.xml.Unmarshaller;
public class ModuleParsor {
private static Logger log = Logger.getLogger(ModuleParsor.class);
private static Module module;
private static ModuleParsor instance = new ModuleParsor();
public static ModuleParsor getInstance()
{
return instance;
}
public ModuleParsor(){
// 获取两个xml文件的路径
String dir = System.getProperty("user.dir");
String mappingPath = dir + "/conf/mapping.xml";
String ommbNODataPath = dir + "/conf/conf.xml";
Mapping mapping = new Mapping();
try
{
mapping.loadMapping(mappingPath);
Reader xmlreader = new InputStreamReader(new FileInputStream(ommbNODataPath), "utf-8");
//FileReader xmlreader = new FileReader(ommbNODataPath);
Unmarshaller unmarshaller = new Unmarshaller(Module.class);
unmarshaller.setMapping(mapping);
module = (Module) unmarshaller.unmarshal(xmlreader);
}
catch (Exception e)
{
log.error("ooo,发生了异常",e);
}
}
public Module getModule(){
return module;
}
public static void main(String[] args) {
ModuleParsor moduleParsor = getInstance();
Module module = moduleParsor.getModule();
log.info(module.getOmmbFtp().getIp());
log.info(module.getOmmbFtp().getPassWord());
log.info(module.getOmmbFtp().getPort());
int i = module.getOmmbFtp().getPort();
System.out.println(i);
String string = module.getOracleDb().getIp();
System.out.println(string);
log.info(module.getOracleDb().getInstance());
}
}
2018-08-24 10:26:08-368 INFO org.exolab.castor.mapping.Mapping.setBaseURL(Mapping.java:198) - D:\workspace_for_luna\BugAnalyseTool/conf is not a URL, trying to convert it to a file URL
2018-08-24 10:26:08-374 INFO org.exolab.castor.mapping.Mapping.loadMapping(Mapping.java:243) - Loading mapping descriptors from ommbNODataMapping.xml
2018-08-24 10:26:08-670 INFO paseXml.ModuleParsor.main(ModuleParsor.java:52) - 10
2018-08-24 10:26:08-670 INFO paseXml.ModuleParsor.main(ModuleParsor.java:53) - bbb
2018-08-24 10:26:08-670 INFO paseXml.ModuleParsor.main(ModuleParsor.java:54) - 21
21
10
2018-08-24 10:26:08-671 INFO paseXml.ModuleParsor.main(ModuleParsor.java:59) - oracle