通过JAXB把XML文件转成JavaBean
来源:互联网 发布:城满财富 理财知 编辑:程序博客网 时间:2024/06/05 15:40
1. Jaxb简介
Jaxb是JDK自带的解析XML的利器,详情可参考https://jaxb.java.net/tutorial/
2. 例子
@XmlRootElementpublic class Command { private String cmd; private int screenLevel; private int psgContextLevel; private List<Rule> rules = new ArrayList<Rule>(); @XmlElement public String getCmd() { return cmd; } public void setCmd(String cmd) { this.cmd = cmd; } @XmlElement public int getScreenLevel() { return screenLevel; } public void setScreenLevel(int screenLevel) { this.screenLevel = screenLevel; } @XmlElement public int getPsgContextLevel() { return psgContextLevel; } public void setPsgContextLevel(int psgContextLevel) { this.psgContextLevel = psgContextLevel; } @XmlElement public List<Rule> getRules() { return rules; } public void setRules(List<Rule> rules) { this.rules = rules; }}
@XmlRootElementpublic class ParamKey { private String groupIndex; private String key; @XmlElement public String getGroupIndex() { return groupIndex; } public void setGroupIndex(String groupIndex) { this.groupIndex = groupIndex; } @XmlElement public String getKey() { return key; } public void setKey(String key) { this.key = key; }}
@XmlRootElementpublic class Rule { private String regex; private List<ParamKey> paramKeys = new ArrayList<ParamKey>(); private String routingInfo; private Pattern regex_pattern; @XmlElement public String getRegex() { return regex; } public void setRegex(String regex) { this.regex_pattern = Pattern.compile(regex.trim()); this.regex = regex; } @XmlElement public List<ParamKey> getParamKeys() { return paramKeys; } public void setParamKeys(List<ParamKey> paramKeys) { this.paramKeys = paramKeys; } @XmlElement public String getRoutingInfo() { return routingInfo; } public void setRoutingInfo(String routingInfo) { this.routingInfo = routingInfo; } @XmlTransient public Pattern getRegex_pattern() { return regex_pattern; } public void setRegex_pattern(Pattern regex_pattern) { this.regex_pattern = regex_pattern; }}
对应的XML:
<?xml version="1.0" encoding="UTF-8"?><command> <cmd>FT</cmd> <screenLevel>2</screenLevel> <rules> <!-- cancel the FT --> <!-- match the right format and wrong format,such as FT: -,FT: -abc --> <rule> <regex>^FT\s*:?\s*-\s*(\S*)?$</regex> <paramKeys> <!-- if otherInfo is not null, the command is wrong --> <paramKey> <groupIndex>1</groupIndex> <key>other</key> </paramKey> </paramKeys> <routingInfo>cancelFt</routingInfo> </rule> <!-- set the FT --> <rule> <!-- FT:airlineCodefltNofltNoSuffix/fltDate/city FT:CA123T/21JAN14/PEK,FT:CA123,FT:CA123/+ --> <regex>^FT\s*:?\s*(\w{2})?(\d{3,4})([A-Z])?(/([.+-]|\d{1,2}[A-Z]{3}(\d{2})?))?(/(.*))?$ </regex> <paramKeys> <paramKey> <groupIndex>1</groupIndex> <key>airlineCode</key> </paramKey> <paramKey> <groupIndex>2</groupIndex> <key>fltNo</key> </paramKey> <paramKey> <groupIndex>3</groupIndex> <key>fltNoSuffix</key> </paramKey> <paramKey> <groupIndex>5</groupIndex> <key>fltDate</key> </paramKey> <paramKey> <groupIndex>8</groupIndex> <key>depStationCode</key> </paramKey> </paramKeys> <routingInfo>setFt</routingInfo> </rule> <!-- show the ft --> <rule> <regex>^FT\s*:?\s*(.*)?$</regex> <paramKeys> <paramKey> <groupIndex>1</groupIndex> <key>fltInfo</key> </paramKey> </paramKeys> <routingInfo>showFt</routingInfo> </rule> </rules></command>
public class Xml2Object {public static void main(String[] args) {File file = new File("D:/WorkSpace_DEP/Test/src/resources/ft.xml");Command cmd = parseXml2Object(file);System.out.println(cmd.getCmd());}public static Command parseXml2Object(File f) {Command cmd = null;try {JAXBContext jaxbContext = JAXBContext.newInstance(Command.class);Unmarshaller jaxbUnMarshaller = jaxbContext.createUnmarshaller();cmd = (Command) jaxbUnMarshaller.unmarshal(f);return cmd;} catch (JAXBException e) {e.printStackTrace();}return cmd;}}
下面的这个例子是XML中的元素和Java类名不一致的例子。
<?xml version="1.0" encoding="UTF-8"?><command xmlns="http://www.travelsky.com/command" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <cmd>FT</cmd> <screenLevel>2</screenLevel> <rules> <rule> <regex>^FT\s*:?\s*-\s*(\S*)?$</regex> <paramKeys> <paramKey> <groupIndex>1</groupIndex> <key>other</key> </paramKey> </paramKeys> <routingInfo>cancelFt</routingInfo> </rule> <rule> <regex>^FT\s*:?\s*(\w{2})?(\d{3,4})([A-Z])?(/([.+-]|\d{1,2}[A-Z]{3}(\d{2})?))?(/(.*))?$ </regex> <paramKeys> <paramKey> <groupIndex>1</groupIndex> <key>airlineCode</key> </paramKey> <paramKey> <groupIndex>2</groupIndex> <key>fltNo</key> </paramKey> <paramKey> <groupIndex>3</groupIndex> <key>fltNoSuffix</key> </paramKey> <paramKey> <groupIndex>5</groupIndex> <key>fltDate</key> </paramKey> <paramKey> <groupIndex>8</groupIndex> <key>depStationCode</key> </paramKey> </paramKeys> <routingInfo>setFt</routingInfo> </rule> <rule> <regex>^FT\s*:?\s*(.*)?$</regex> <paramKeys> <paramKey> <groupIndex>1</groupIndex> <key>fltInfo</key> </paramKey> </paramKeys> <routingInfo>showFt</routingInfo> </rule> </rules></command>
对应的JavaBean
@XmlRootElement(name="command", namespace="http://www.travelsky.com/command")public class CommandEntity { /** * cmd:指令名称 * */ private String cmd; /** * screenLevel:指令级别 * */ private int screenLevel; /** * psgContextLevel:读取旅客缓存的级�? * */ private int psgContextLevel; /** * rules:指令解析规则 * */ private List<RuleEntity> rules = new ArrayList<RuleEntity>(); @XmlElement(name="cmd",namespace="http://www.travelsky.com/command") public String getCmd() { return cmd; } public void setCmd(String cmd) { this.cmd = cmd; } @XmlElement(name="screenLevel", namespace="http://www.travelsky.com/command") public int getScreenLevel() { return screenLevel; } public void setScreenLevel(int screenLevel) { this.screenLevel = screenLevel; } @XmlElement(name="psgContextLevel",namespace="http://www.travelsky.com/command") public int getPsgContextLevel() { return psgContextLevel; } public void setPsgContextLevel(int psgContextLevel) { this.psgContextLevel = psgContextLevel; } // 注意:对于数组的形式,一定要增加一个注解<span style="font-family: Arial, Helvetica, sans-serif;">XmlElementWrapper,否则xml无法正确解析</span> @XmlElementWrapper(name = "rules", namespace = "http://www.travelsky.com/command") @XmlElement(name="rule",namespace="http://www.travelsky.com/command") public List<RuleEntity> getRules() { return rules; } public void setRules(List<RuleEntity> rules) { this.rules = rules; }}
@XmlRootElement(name="rules", namespace="http://www.travelsky.com/command")public class RuleEntity { /** * regex:指令解析的正�? * */ private String regex; /** * paramKeys:指令解析的key集合 * */ private List<ParamKeyEntity> paramKeys = new ArrayList<ParamKeyEntity>(); /** * routingInfo:业务逻辑标识 * */ private String routingInfo; /** * regex_pattern:正则对应的Pattern * */ private Pattern regex_pattern; @XmlElement(name="regex",namespace="http://www.travelsky.com/command") public String getRegex() { return regex; } /** * * setRegex:解析xml时,根据正则生成 Pattern<br/> * * @param regex * 指令的正�?<br/> */ public void setRegex(String regex) { this.regex_pattern = Pattern.compile(regex.trim()); this.regex = regex; }
@XmlElementWrapper(name="paramKeys",namespace="http://www.travelsky.com/command") @XmlElement(name="paramKey",namespace="http://www.travelsky.com/command") public List<ParamKeyEntity> getParamKeys() { return paramKeys; } public void setParamKeys(List<ParamKeyEntity> paramKeys) { this.paramKeys = paramKeys; } @XmlElement(name="routingInfo",namespace="http://www.travelsky.com/command") public String getRoutingInfo() { return routingInfo; } public void setRoutingInfo(String routingInfo) { this.routingInfo = routingInfo; } @XmlTransient public Pattern getRegex_pattern() { return regex_pattern; } public void setRegex_pattern(Pattern regex_pattern) { this.regex_pattern = regex_pattern; }}
@XmlRootElement(name="paramKeys", namespace="http://www.travelsky.com/command")public class ParamKeyEntity { /** * groupIndex:字段group顺序 * */ private String groupIndex; /** * key:字段的key * */ private String key; @XmlElement(name="groupIndex",namespace="http://www.travelsky.com/command") public String getGroupIndex() { return groupIndex; } public void setGroupIndex(String groupIndex) { this.groupIndex = groupIndex; } @XmlElement(name="key", namespace="http://www.travelsky.com/command") public String getKey() { return key; } public void setKey(String key) { this.key = key; }}
public class Xml2Object {public static void main(String[] args) {File file = new File("D:/WorkSpace_DEP/Test/src/resources/ft.xml");CommandEntity cmd = parseXml2Object(file);System.out.println(cmd.getCmd());}public static CommandEntity parseXml2Object(File f) {CommandEntity cmd = null;try {JAXBContext jaxbContext = JAXBContext.newInstance(CommandEntity.class);Unmarshaller jaxbUnMarshaller = jaxbContext.createUnmarshaller();cmd = (CommandEntity) jaxbUnMarshaller.unmarshal(f);return cmd;} catch (JAXBException e) {e.printStackTrace();}return cmd;}}
0 0
- 通过JAXB把XML文件转成JavaBean
- jaxb的实例 java解析xml转成javabean
- JAXB:XML to JavaBean
- JAXB JavaBean转xml
- jaxb xml转javaBean
- 通过jaxb实现javabean和xml的转换
- JAXB: 通过schema验证XML文件
- JAXB转换xml和JavaBean
- 通过google的gson把xml转成json
- JAXB解析XML文件
- jaxb-xml和javabean转换实战
- Java Jaxb JavaBean与XML互转
- JAXB实现xml与javabean的转换
- JAXB生成xml及转化javaBean
- JAXB 实现 XML & JAVABEAN 的转换
- JAXB xml与javaBean的转换
- JAXB实现JavaBean和xml互相转换
- JAXB实现JavaBean与XML互相转换
- 微信测试
- socket()普通用户, Operation not permitted
- Spring 中获取servletContext及WebApplicationContext
- 程序员应该学习的金融知识股票高清视频教程
- 笔记本有无线网卡却不能搜到wifi
- 通过JAXB把XML文件转成JavaBean
- 总结的不错的Android事件分发介绍
- Java解析XML文档的四种方法详解
- 2.java多线程之Executor类
- UDP SOCKET编程中的connect()
- 程序员面试之葵花宝典
- Linux编程错误处理函数
- haayaGuardV0---2---服务端功能逻辑
- 将一个数组随机打乱