链接上一遍 JAXB介绍一 , 本节主要介绍解析xml的步骤, 下面的例子是在实际项目中运用的, 把它拿出来单独写一个java运行程序.

5. 测试实例

先给出我的代码结构图:

再给出要解析的Script.xml文件的内容:

  1. <?xml version='1.0' encoding='UTF-8' ?>
  2. <Script>
  3. <SchemaVersion MajorVerNo="1" MinorVerNo="0" />
  4. <Activity>
  5. <Action>ReinstallTV</Action>
  6. </Activity>
  7. <Activity>
  8. <Action>TuneChannel</Action>
  9. <Priority>1</Priority>
  10. <Attributes>
  11. <ChannelNumber>340</ChannelNumber>
  12. </Attributes>
  13. </Activity>
  14. </Script>

下面进入正题:

1. 给出Script.java的代码, 其实就是对Script.xml的类似Bean构建:

  1. package com.demo.util;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.xml.bind.annotation.XmlAccessType;
  6. import javax.xml.bind.annotation.XmlAccessorType;
  7. import javax.xml.bind.annotation.XmlElement;
  8. import javax.xml.bind.annotation.XmlRootElement;
  9. import javax.xml.bind.annotation.XmlType;
  10.  
  11. @XmlRootElement(name = "Script")
  12. @XmlAccessorType(XmlAccessType.FIELD)
  13. @XmlType(propOrder = {"schemaVersion","activities"})
  14. public class Script {
  15.  
  16. @XmlElement(name = "SchemaVersion", required = false)
  17. private SchemaVersion schemaVersion;
  18.  
  19. @XmlElement(name = "Activity", required = false)
  20. private List<Activity> activities;
  21.  
  22. public SchemaVersion getSchemaVersion() {
  23. return schemaVersion;
  24. }
  25.  
  26. public void setSchemaVersion(SchemaVersion schemaVersion) {
  27. this.schemaVersion = schemaVersion;
  28. }
  29.  
  30. public List<Activity> getActivity() {
  31. return activities;
  32. }
  33.  
  34. public void setActivity(List<Activity> activities) {
  35. this.activities = activities;
  36. }
  37.  
  38. }

2. 给出SchemaVersion.java的代码:

  1. package com.demo.util;
  2.  
  3. import javax.xml.bind.annotation.XmlAccessType;
  4. import javax.xml.bind.annotation.XmlAccessorType;
  5. import javax.xml.bind.annotation.XmlAttribute;
  6. import javax.xml.bind.annotation.XmlRootElement;
  7. import javax.xml.bind.annotation.XmlType;
  8.  
  9. @XmlRootElement(name = "SchemaVersion")
  10. @XmlAccessorType(XmlAccessType.FIELD)
  11. @XmlType(propOrder = {"majorVerNo","minorVerNo"})
  12. public class SchemaVersion {
  13.  
  14. @XmlAttribute(name = "MajorVerNo", required = false)
  15. protected String majorVerNo;
  16.  
  17. @XmlAttribute(name = "MinorVerNo", required = false)
  18. protected String minorVerNo;
  19.  
  20. public String getMajorVerNo() {
  21. return majorVerNo;
  22. }
  23.  
  24. public void setMajorVerNo(String majorVerNo) {
  25. this.majorVerNo = majorVerNo;
  26. }
  27.  
  28. public String getMinorVerNo() {
  29. return minorVerNo;
  30. }
  31.  
  32. public void setMinorVerNo(String minorVerNo) {
  33. this.minorVerNo = minorVerNo;
  34. }
  35.  
  36. }

3. 给出Activity.java的代码结构:

  1. package com.demo.util;
  2.  
  3. import javax.xml.bind.annotation.XmlAccessType;
  4. import javax.xml.bind.annotation.XmlAccessorType;
  5. import javax.xml.bind.annotation.XmlElement;
  6. import javax.xml.bind.annotation.XmlRootElement;
  7. import javax.xml.bind.annotation.XmlType;
  8.  
  9. @XmlRootElement(name = "Activity")
  10. @XmlAccessorType(XmlAccessType.FIELD)
  11. @XmlType(propOrder = {"action","priority","attributes"})
  12. public class Activity {
  13.  
  14. @XmlElement(name = "Action", required = false)
  15. protected String action;
  16.  
  17. @XmlElement(name = "Priority", required = false)
  18. protected String priority;
  19.  
  20. @XmlElement(name = "Attributes", required = false)
  21. protected Attributes attributes;
  22.  
  23. public String getAction() {
  24. return action;
  25. }
  26.  
  27. public void setAction(String action) {
  28. this.action = action;
  29. }
  30.  
  31. public String getPriority() {
  32. return priority;
  33. }
  34.  
  35. public void setPriority(String priority) {
  36. this.priority = priority;
  37. }
  38.  
  39. public Attributes getAttributes() {
  40. return attributes;
  41. }
  42.  
  43. public void setAttributes(Attributes attributes) {
  44. this.attributes = attributes;
  45. }
  46. }

4. 给出Attributes.java的代码:

  1. package com.demo.util;
  2.  
  3. import javax.xml.bind.annotation.XmlAccessType;
  4. import javax.xml.bind.annotation.XmlAccessorType;
  5. import javax.xml.bind.annotation.XmlElement;
  6. import javax.xml.bind.annotation.XmlRootElement;
  7. import javax.xml.bind.annotation.XmlType;
  8.  
  9. @XmlRootElement(name = "Attributes")
  10. @XmlAccessorType(XmlAccessType.FIELD)
  11. @XmlType(propOrder = {"channelNumber"})
  12. public class Attributes {
  13.  
  14. @XmlElement(name = "ChannelNumber", required = false)
  15. protected String channelNumber;
  16.  
  17. public String getChannelNumber() {
  18. return channelNumber;
  19. }
  20.  
  21. public void setChannelNumber(String channelNumber) {
  22. this.channelNumber = channelNumber;
  23. }
  24.  
  25. }

5. 给出Test.java对Script.xml处理的代码:

  1. package com.demo.test;
  2.  
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.util.List;
  8.  
  9. import javax.xml.bind.JAXBContext;
  10. import javax.xml.bind.JAXBException;
  11. import javax.xml.bind.Unmarshaller;
  12.  
  13. import com.demo.util.Activity;
  14. import com.demo.util.Script;
  15.  
  16. public class Test {
  17.  
  18. public static void main(String[] args) {
  19. // TODO Auto-generated method stub

  20.    // Script.xml路径可以随时改变
  21. String SCRIPT_XML_PATH = "C:/Script/Script.xml";
  22. try {
  23. File file = new File(SCRIPT_XML_PATH);
  24. JAXBContext jaxbContext = JAXBContext.newInstance(Script.class);
  25. Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
  26. Script script = (Script) unmarshaller.unmarshal(file);
  27. System.out.println("SchemaVersion=>MajorVerNo="+script.getSchemaVersion().getMajorVerNo());
  28. System.out.println("SchemaVersion=>MinorVerNo="+script.getSchemaVersion().getMinorVerNo());
  29. boolean hasReinstallTvCommand = false;
  30. if (script != null) {
  31. List<Activity> activities = script.getActivity();
  32. int activitySize = activities.size();
  33. if (activitySize > 0) {
  34. for(Activity activity : activities) {
  35. System.out.println("Activity:");
  36. if (activity.getAction() != null) {
  37. System.out.println(" Action="+activity.getAction());
  38. if ("ReinstallTV".equalsIgnoreCase(activity.getAction())) {
  39. hasReinstallTvCommand = true;
  40. //break;
  41. }
  42. }
  43. if (activity.getPriority() != null) {
  44. System.out.println(" Priority="+activity.getPriority());
  45. }
  46. if (activity.getAttributes() != null) {
  47. if (activity.getAttributes().getChannelNumber() != null) {
  48. System.out.println(" ChannelNumber="+activity.getAttributes().getChannelNumber());
  49. }
  50. }
  51. }
  52. }
  53. }
  54. System.out.println("hasReinstallTvCommand="+hasReinstallTvCommand);
  55.  
  56. } catch (JAXBException e) {
  57. System.out.println("e="+e.getMessage());
  58. }

6. 给出最后Test.java运行的代码, 打印出的log:

  1. SchemaVersion=>MajorVerNo=1
  2. SchemaVersion=>MinorVerNo=0
  3. Activity:
  4. Action=ReinstallTV
  5. Activity:
  6. Action=TuneChannel
  7. Priority=1
  8. ChannelNumber=340
  9. hasReinstallTvCommand=true

待续...

JAXB介绍二的更多相关文章

  1. Lucene.Net 2.3.1开发介绍 —— 二、分词(六)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(六) Lucene.Net的上一个版本是2.1,而在2.3.1版本中才引入了Next(Token)方法重载,而ReusableStrin ...

  2. Lucene.Net 2.3.1开发介绍 —— 二、分词(五)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(五) 2.1.3 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只 ...

  3. Lucene.Net 2.3.1开发介绍 —— 二、分词(三)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(三) 1.3 分词器结构 1.3.1 分词器整体结构 从1.2节的分析,终于做到了管中窥豹,现在在Lucene.Net项目中添加一个类关 ...

  4. Lucene.Net 2.3.1开发介绍 —— 二、分词(四)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(四) 2.1.2 可以使用的内置分词 简单的分词方式并不能满足需求.前文说过Lucene.Net内置分词中StandardAnalyze ...

  5. Lucene.Net 2.3.1开发介绍 —— 二、分词(二)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(二) 1.2.分词的过程 1.2.1.分词器工作的过程 内置的分词器效果都不好,那怎么办?只能自己写了!在写之前当然是要先看看内置的分词 ...

  6. Lucene.Net 2.3.1开发介绍 —— 二、分词(一)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(一) Lucene.Net中,分词是核心库之一,当然,也可以将它独立出来.目前Lucene.Net的分词库很不完善,实际应用价值不高.唯 ...

  7. {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm

    Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...

  8. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  9. MySQL行(记录)的详细操作一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理

    MySQL行(记录)的详细操作 阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: ...

随机推荐

  1. if if 和 if elif 的区别

    再一次编程中意外使用了if if 也实现了 if elif的功能,所以搜索了下其中的区别: 1.if if 和 if elif 是有区别的,只是在某些情况下才会一样的效果: 2.随意使用会导致意外的错 ...

  2. 《精通Spring4.X企业应用开发实战》读后感第七章(AOP基础知识、jdk动态代理,CGLib动态代理)

  3. Entity Framework Code-First(5):Code First Conventions

    Code First Conventions: We have seen how EF Code-First creates DB tables from domain classes in the ...

  4. 安装json format插件

    更多工具->扩展->搜索:son format插件 这样得到的json数据以一种美观的样式显示.

  5. DMA缓冲区乒乓操作的处理

    http://www.51hei.com/bbs/dpj-141761-1.html https://blog.csdn.net/sunnydreamrain/article/details/8288 ...

  6. sql server 2008 r2安装

    选择功能(好像报错了-下次重装系统测试)

  7. EFK Stack容器部署

    基础环境 安装docker # curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/intern ...

  8. 审美赛_(java)实现

    问题描述 <审美的历程>课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋友之手.老师请同学们分辨哪些画的作者是梵高,但是老师自己并没有答案,因为这些画看上去都 ...

  9. Docker 容器的数据卷

    数据卷的特点: 1. 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中 2. 数据卷可以在容器之间共享和重用 3. 可以对数据卷里的内容直接进行修改 ...

  10. 清北刷题冲刺 10-30 a.m

    星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...