zoukankan      html  css  js  c++  java
  • JAXB介绍二

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

    5. 测试实例

    先给出我的代码结构图:

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

    <?xml version='1.0' encoding='UTF-8' ?>
    <Script>
      <SchemaVersion MajorVerNo="1" MinorVerNo="0" />
        <Activity>
            <Action>ReinstallTV</Action>        
        </Activity>
        <Activity>
            <Action>TuneChannel</Action>
            <Priority>1</Priority>
            <Attributes>
                <ChannelNumber>340</ChannelNumber>
            </Attributes>
        </Activity>
    </Script>

    下面进入正题:

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

    package com.demo.util;
    
    import java.util.List;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
    
    @XmlRootElement(name = "Script")
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(propOrder = {"schemaVersion","activities"})
    public class Script {
    
        @XmlElement(name = "SchemaVersion", required = false)
        private SchemaVersion schemaVersion;
        
        @XmlElement(name = "Activity", required = false)
        private List<Activity> activities;
    
        public SchemaVersion getSchemaVersion() {
            return schemaVersion;
        }
    
        public void setSchemaVersion(SchemaVersion schemaVersion) {
            this.schemaVersion = schemaVersion;
        }
    
        public List<Activity> getActivity() {
            return activities;
        }
    
        public void setActivity(List<Activity> activities) {
            this.activities = activities;
        }
        
    }

    2. 给出SchemaVersion.java的代码:

    package com.demo.util;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
    
    @XmlRootElement(name = "SchemaVersion")
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(propOrder = {"majorVerNo","minorVerNo"})
    public class SchemaVersion {
    
        @XmlAttribute(name = "MajorVerNo", required = false)
        protected String majorVerNo;
        
        @XmlAttribute(name = "MinorVerNo", required = false)
        protected String minorVerNo;
        
        public String getMajorVerNo() {
            return majorVerNo;
        }
    
        public void setMajorVerNo(String majorVerNo) {
            this.majorVerNo = majorVerNo;
        }
    
        public String getMinorVerNo() {
            return minorVerNo;
        }
    
        public void setMinorVerNo(String minorVerNo) {
            this.minorVerNo = minorVerNo;
        }
        
    }

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

    package com.demo.util;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
    
    @XmlRootElement(name = "Activity")
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(propOrder = {"action","priority","attributes"})
    public class Activity {
        
        @XmlElement(name = "Action", required = false)
        protected String action;
        
        @XmlElement(name = "Priority", required = false)
        protected String priority;
        
        @XmlElement(name = "Attributes", required = false)
        protected Attributes attributes;
        
        public String getAction() {
            return action;
        }
    
        public void setAction(String action) {
            this.action = action;
        }
    
        public String getPriority() {
            return priority;
        }
    
        public void setPriority(String priority) {
            this.priority = priority;
        }
    
        public Attributes getAttributes() {
            return attributes;
        }
    
        public void setAttributes(Attributes attributes) {
            this.attributes = attributes;
        }
    }

    4. 给出Attributes.java的代码:

    package com.demo.util;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
    
    @XmlRootElement(name = "Attributes")
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(propOrder = {"channelNumber"})
    public class Attributes {
    
        @XmlElement(name = "ChannelNumber", required = false)
        protected String channelNumber;
    
        public String getChannelNumber() {
            return channelNumber;
        }
    
        public void setChannelNumber(String channelNumber) {
            this.channelNumber = channelNumber;
        }
        
    }

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

    package com.demo.test;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.List;
    
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Unmarshaller;
    
    import com.demo.util.Activity;
    import com.demo.util.Script;
    
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
       // Script.xml路径可以随时改变 String SCRIPT_XML_PATH
    = "C:/Script/Script.xml"; try { File file = new File(SCRIPT_XML_PATH); JAXBContext jaxbContext = JAXBContext.newInstance(Script.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Script script = (Script) unmarshaller.unmarshal(file); System.out.println("SchemaVersion=>MajorVerNo="+script.getSchemaVersion().getMajorVerNo()); System.out.println("SchemaVersion=>MinorVerNo="+script.getSchemaVersion().getMinorVerNo()); boolean hasReinstallTvCommand = false; if (script != null) { List<Activity> activities = script.getActivity(); int activitySize = activities.size(); if (activitySize > 0) { for(Activity activity : activities) { System.out.println("Activity:"); if (activity.getAction() != null) { System.out.println(" Action="+activity.getAction()); if ("ReinstallTV".equalsIgnoreCase(activity.getAction())) { hasReinstallTvCommand = true; //break; } } if (activity.getPriority() != null) { System.out.println(" Priority="+activity.getPriority()); } if (activity.getAttributes() != null) { if (activity.getAttributes().getChannelNumber() != null) { System.out.println(" ChannelNumber="+activity.getAttributes().getChannelNumber()); } } } } } System.out.println("hasReinstallTvCommand="+hasReinstallTvCommand); } catch (JAXBException e) { System.out.println("e="+e.getMessage()); }

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

    SchemaVersion=>MajorVerNo=1
    SchemaVersion=>MinorVerNo=0
    Activity:
       Action=ReinstallTV
    Activity:
       Action=TuneChannel
       Priority=1
       ChannelNumber=340
    hasReinstallTvCommand=true

    待续...

  • 相关阅读:
    alpine python3中使用mysql报错ModuleNotFoundError: No module named 'MySQLdb'
    Galera集群部署
    Kibana did not load properly.Check the server output for more information。
    zabbix-server迁移
    traefik使用etcd存储配置
    Rancher2.4搭建单机版rabbitmq
    ngx_http_upstream_module模块说明
    【说明】
    运维日常集合(个人向 坚持更新)
    Linux监控-历史细项数据回溯
  • 原文地址:https://www.cnblogs.com/xumBlog/p/9667005.html
Copyright © 2011-2022 走看看