您的位置:首页 > 编程语言 > Java开发

jaxb的实例 java解析xml转成javabean

2015-11-27 11:20 555 查看
代码

public class CMSVersion {

private CMSVersion() {
}

private static Logger log = LoggerFactory.getLogger(CMSVersion.class);

private static Root root = null;

static {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Root.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
root = (Root) jaxbUnmarshaller.unmarshal(Root.class
.getClassLoader().getResourceAsStream("cmsversion.xml"));
} catch (Exception e) {
log.error("通过jaxb解析xml为javaBean报错-------------------------" + e);
}
}

public static Map<String, String> getCMSVersion(String keyName,
String platformName, String versionNumber) {
log.debug("keyName-------------------------" + keyName);
log.debug("platformName-------------------------" + platformName);
log.debug("versionNumber-------------------------" + versionNumber);
try {
if (StringUtils.isNotEmpty(keyName)
&& StringUtils.isNotEmpty(platformName)
&& StringUtils.isNotEmpty(versionNumber)) {
if (null != root) {
// 1.获取key对象
KeyProms key = getKey(keyName);
log.debug("key-------------------------" + key);
if (null != key) {
// 2.获取平台对象
Platform platform = getPlatform(key, platformName);
log.debug("platform-------------------------"
+ platform);
if (null != platform) {
// 3.获取符合的版本
Version version = getVersion(platform,
versionNumber);
log.debug("version-------------------------"
+ version);
if (null != version) {
return getContent(version);
}
}
}
}
}
} catch (Exception e) {
log.error("返回该版本号下面的所有信息报错-------------------------" + e);
}
return null;
}

private static KeyProms getKey(String keyName) {
List<KeyProms> keyList = root.getKeyPromsList();
if (null != keyList && keyList.size() > 0) {
for (KeyProms key : keyList) {
if (keyName.equals(key.getName())) {
return key;
}
}
}
return null;

}

private static Platform getPlatform(KeyProms key, String platformName) {
List<Platform> platformList = key.getPlatform();
if (null != platformList && platformList.size() > 0) {
for (Platform platform : platformList) {
if (platformName.equals(platform.getName())) {
return platform;
}
}
}
return null;

}

private static Version getVersion(Platform platform, String versionNumber) {
List<Version> versionList = platform.getVersion();
if (null != versionList && versionList.size() > 0) {
int currentVersion = Integer.valueOf(versionNumber.split("\\.")[0]);
for (Version version : versionList) {
String versionNumberTemp = version.getVersionNumber();
if (StringUtils.isNotEmpty(versionNumberTemp)) {
String[] versionNumberArray = versionNumberTemp.substring(
1, versionNumberTemp.length() - 1).split("-");
String lowStr = versionNumberArray[0];
String highStr = versionNumberArray.length == 1 ? ""
: versionNumberArray[1];
int low = "".equals(lowStr) ? 0 : Integer.valueOf(lowStr
.split("\\.")[0]);
int high = "".equals(highStr) ? 0 : Integer.valueOf(highStr
.split("\\.")[0]);
// 版本以上
if (high == 0) {
if (currentVersion >= low) {
return version;
}
}
// 版本以下
if (low == 0) {
if (currentVersion <= high) {
return version;
}
}
// 版本之间
if (high != 0 && low != 0) {
if (currentVersion <= high && low <= currentVersion) {
return version;
}
}
}
}
}
return null;
}

private static Map<String, String> getContent(Version version) {
Map<String, String> map = null;
List<Entry> entryList = version.getEntry();
if (null != entryList && entryList.size() > 0) {
map = new LinkedHashMap<String, String>();
for (Entry entry : entryList) {
map.put(entry.getTempletCode(), entry.getTempletVerson());
}
}
log.debug("content-------------------------" + map);
return map;
}
}


public class Entry {

private String templetCode;

private String templetVerson;

@XmlAttribute
public String getTempletCode() {
return templetCode;
}

public void setTempletCode(String templetCode) {
this.templetCode = templetCode;
}

@XmlAttribute
public String getTempletVerson() {
return templetVerson;
}

public void setTempletVerson(String templetVerson) {
this.templetVerson = templetVerson;
}

@Override
public String toString() {
return "Entry [templetCode=" + templetCode + ", templetVerson="
+ templetVerson + "]";
}

}


public class KeyProms {

private String name;

private List<Platform> platform;

@XmlAttribute
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@XmlElement
public List<Platform> getPlatform() {
return platform;
}

public void setPlatform(List<Platform> platform) {
this.platform = platform;
}

@Override
public String toString() {
return "Key [name=" + name + ", platform=" + platform + "]";
}

}


public class Platform {

private String name;

private List<Version> version;

@XmlAttribute
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@XmlElement
public List<Version> getVersion() {
return version;
}

public void setVersion(List<Version> version) {
this.version = version;
}

@Override
public String toString() {
return "Platform [name=" + name + ", version=" + version + "]";
}

}


@XmlRootElement(name = "cmsversion")
public class Root {

private List<KeyProms> keyPromsList;

@XmlElement(name = "keyproms")
public List<KeyProms> getKeyPromsList() {
return keyPromsList;
}

public void setKeyPromsList(List<KeyProms> keyPromsList) {
this.keyPromsList = keyPromsList;
}

@Override
public String toString() {
return "Root [keyPromsList=" + keyPromsList + "]";
}

}


public class Version {

private String versionNumber;

private List<Entry> entry;

@XmlAttribute
public String getVersionNumber() {
return versionNumber;
}

public void setVersionNumber(String versionNumber) {
this.versionNumber = versionNumber;
}

@XmlElementWrapper(name = "content")
@XmlElement
public List<Entry> getEntry() {
return entry;
}

public void setEntry(List<Entry> entry) {
this.entry = entry;
}

@Override
public String toString() {
return "Version [versionNumber=" + versionNumber + ", entry=" + entry
+ "]";
}

}


配置文件cmsversion.xml

<?xml version="1.0" encoding="UTF-8"?>
<cmsversion>
<keyproms name="key">
<platform name="iphone">
<version versionNumber="[-5.0]">
<content>
<entry templetCode="iphone_1" templetVerson="iphone_value_1" />
<entry templetCode="iphone_2" templetVerson="iphone_value_2" />
<entry templetCode="iphone_3" templetVerson="iphone_value_3" />
<entry templetCode="iphone_4" templetVerson="iphone_value_4" />
</content>
</version>
<version versionNumber="[6.0-13.4]">
<content>
<entry templetCode="iphone_11" templetVerson="iphone_value_11" />
<entry templetCode="iphone_22" templetVerson="iphone_value_22" />
<entry templetCode="iphone_33" templetVerson="iphone_value_33" />
<entry templetCode="iphone_44" templetVerson="iphone_value_44" />
</content>
</version>
<version versionNumber="[14.5-20.0]">
<content>
<entry templetCode="iphone_111" templetVerson="iphone_value_111" />
<entry templetCode="iphone_222" templetVerson="iphone_value_222" />
<entry templetCode="iphone_333" templetVerson="iphone_value_333" />
<entry templetCode="iphone_444" templetVerson="iphone_value_444" />
</content>
</version>
<version versionNumber="[21.1-]">
<content>
<entry templetCode="iphone_1111" templetVerson="iphone_value_1111" />
<entry templetCode="iphone_2222" templetVerson="iphone_value_2222" />
<entry templetCode="iphone_3333" templetVerson="iphone_value_3333" />
<entry templetCode="iphone_4444" templetVerson="iphone_value_4444" />
</content>
</version>
</platform>

<platform name="android">
<version versionNumber="[-10.0]">
<content>
<entry templetCode="android_1" templetVerson="android_value_1" />
<entry templetCode="android_2" templetVerson="android_value_2" />
<entry templetCode="android_3" templetVerson="android_value_3" />
<entry templetCode="android_4" templetVerson="android_value_4" />
</content>
</version>
<version versionNumber="[10.6-15.4]">
<content>
<entry templetCode="android_11" templetVerson="android_value_11" />
<entry templetCode="android_22" templetVerson="android_value_22" />
<entry templetCode="android_33" templetVerson="android_value_33" />
<entry templetCode="android_44" templetVerson="android_value_44" />
</content>
</version>
<version versionNumber="[15.5-25.0]">
<content>
<entry templetCode="android_111" templetVerson="android_value_111" />
<entry templetCode="android_222" templetVerson="android_value_222" />
<entry templetCode="android_333" templetVerson="android_value_333" />
<entry templetCode="android_444" templetVerson="android_value_444" />
</content>
</version>
<version versionNumber="[25.1-]">
<content>
<entry templetCode="android_1111" templetVerson="android_value_1111" />
<entry templetCode="android_2222" templetVerson="android_value_2222" />
<entry templetCode="android_3333" templetVerson="android_value_3333" />
<entry templetCode="android_4444" templetVerson="android_value_4444" />
</content>
</version>
</platform>
</keyproms>

<keyproms name="key1">
<platform name="iphone">
<version versionNumber="[-5.0]">
<content>
<entry templetCode="iphone_1" templetVerson="iphone_value_1" />
<entry templetCode="iphone_2" templetVerson="iphone_value_2" />
<entry templetCode="iphone_3" templetVerson="iphone_value_3" />
<entry templetCode="iphone_4" templetVerson="iphone_value_4" />
<entry templetCode="iphone_5" templetVerson="iphone_value_5" />
</content>
</version>
<version versionNumber="[5.6-13.4]">
<content>
<entry templetCode="iphone_11" templetVerson="iphone_value_11" />
<entry templetCode="iphone_22" templetVerson="iphone_value_22" />
<entry templetCode="iphone_33" templetVerson="iphone_value_33" />
<entry templetCode="iphone_44" templetVerson="iphone_value_44" />
<entry templetCode="iphone_55" templetVerson="iphone_value_55" />
</content>
</version>
<version versionNumber="[13.5-20.0]">
<content>
<entry templetCode="iphone_111" templetVerson="iphone_value_111" />
<entry templetCode="iphone_222" templetVerson="iphone_value_222" />
<entry templetCode="iphone_333" templetVerson="iphone_value_333" />
<entry templetCode="iphone_444" templetVerson="iphone_value_444" />
<entry templetCode="iphone_555" templetVerson="iphone_value_555" />
</content>
</version>
<version versionNumber="[21.1-]">
<content>
<entry templetCode="iphone_1111" templetVerson="iphone_value_1111" />
<entry templetCode="iphone_2222" templetVerson="iphone_value_2222" />
<entry templetCode="iphone_3333" templetVerson="iphone_value_3333" />
<entry templetCode="iphone_4444" templetVerson="iphone_value_4444" />
<entry templetCode="iphone_5555" templetVerson="iphone_value_5555" />
</content>
</version>
</platform>

<platform name="android">
<version versionNumber="[-10.0]">
<content>
<entry templetCode="android_1" templetVerson="android_value_1" />
<entry templetCode="android_2" templetVerson="android_value_2" />
<entry templetCode="android_3" templetVerson="android_value_3" />
<entry templetCode="android_4" templetVerson="android_value_4" />
<entry templetCode="android_5" templetVerson="android_value_5" />
</content>
</version>
<version versionNumber="[10.6-15.4]">
<content>
<entry templetCode="android_11" templetVerson="android_value_11" />
<entry templetCode="android_22" templetVerson="android_value_22" />
<entry templetCode="android_33" templetVerson="android_value_33" />
<entry templetCode="android_44" templetVerson="android_value_44" />
<entry templetCode="android_55" templetVerson="android_value_55" />
</content>
</version>
<version versionNumber="[15.5-25.0]">
<content>
<entry templetCode="android_111" templetVerson="android_value_111" />
<entry templetCode="android_222" templetVerson="android_value_222" />
<entry templetCode="android_333" templetVerson="android_value_333" />
<entry templetCode="android_444" templetVerson="android_value_444" />
<entry templetCode="android_555" templetVerson="android_value_555" />
</content>
</version>
<version versionNumber="[25.1-]">
<content>
<entry templetCode="android_1111" templetVerson="android_value_1111" />
<entry templetCode="android_2222" templetVerson="android_value_2222" />
<entry templetCode="android_3333" templetVerson="android_value_3333" />
<entry templetCode="android_4444" templetVerson="android_value_4444" />
<entry templetCode="android_5555" templetVerson="android_value_5555" />
</content>
</version>
</platform>
</keyproms>
</cmsversion>


通过该代码可以试一下是否成功

public class CMSVersionTest {

@Test
public void CMSVersion() throws Exception {
System.out.println(CMSVersion.getCMSVersion("key", "iphone", "4.1"));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: