SAX 解析 xml 文件

如何定义一个 xml文件?


结构简单,可读性好。


SAX 解析的好处就不说了,底下的 xml在结构上达不到简单。 url 这个标签在机器角度来说是多余的,只是为了以后修改方便,为了给维护人员看。文章中的URL地址为了保密做了错误修改。

定义一个 xml,为了和 java类相互绑定。

<urlLists>
    <url name="Central JIRA" >
        <env id="Production">
            https://greenhoppnation=%2Fsecure%2FDashboard.jspa
        </env>
        <env id="Integration">
            https://s_destination=%2Fsecure%2FDashboard.jspa
        </env>
        <env id="QA">
            https://greenhopper-qa.app.aecure%2FDashboard.jspa
        </env>
        <env id="Failover">
            https://%2Fsecure%2FDashboard.jspa
        </env>
    </url>
    <url name="Central Confluence" >
        <env id="Production">
            https://conf1B8C5D3144EBC16677280396E971?os_destination=%2Findex.action
        </env>
        <env id="Integration">
            https://destgsu0711.zeu.alcatel-lucent.com:9443
        </env>
        <env id="QA">
            https://c056A196E750849D67F4E77F1B2?os_destination=%2Findex.action
        </env>
        <env id="Failover">
            https://1AA91DD702AF995C575E4?os_destination=%2Findex.action
        </env>
    </url>
    <url name="IPP JIRA" >
        <env id="Production">
            https://atla/login.jsp
        </env>
        <env id="Staging">
            https://ira-staging/login.jsp
        </env>
    </url>
    <url name="IPP Confluence" >
        <env id="Production">
            https://atlassianwave.wion?os_destination=%2Findex.action
        </env>
        <env id="Staging">
            https://atlassianwtion?os_destination=%2Fdashboard.action
        </env>
    </url>
    <url name="STS Confluence" >
        <env id="Intergration">
            https://frmrszvw%2Fsecure%2FDashboard.jspa
        </env>
        <env id="QA">
            https://sts-qa.app.alcatFsecure%2FDashboard.jspa
        </env>
    </url>
</urlLists>

定义一个java 类


public class Environment {
    String name;
    String url;
    String environment;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    String id;
    public String getName() {
        return name;
    }

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

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getEnvironment() {
        return environment;
    }

    public void setEnvironment(String environment) {
        this.environment = environment;
    }



}

定义一个自己的解析器,覆盖父类中的方法:



/**
 * Created with IntelliJ IDEA.
 * User: WEISHI
 * Date: 14-6-18
 * Time: 下午22:28
 * To change this template use File | Settings | File Templates.
 */
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;

 import java.util.ArrayList;
 import java.util.List;

public class Myparse extends DefaultHandler {
    List<Environment> environmentList;
    Environment environment;
    String tagName;
    public List<Environment> getEnvironmentList() {
        return environmentList;
    }

    public void setEnvironmentList(List<Environment> environmentList) {
        this.environmentList = environmentList;
    }

    @Override
    public void startDocument ()
            throws SAXException
    {//这个方法 只会被执行一次
        environmentList=new ArrayList<Environment>();
    }

    @Override
    public void startElement (String uri, String localName,
                              String qName, Attributes attributes) //有多少个元素就会被执行多少次
            throws SAXException
    {     environment=new Environment();

         if(qName.equals("env")){
             environment.setId(attributes.getValue(0));

         }
        this.tagName=qName;

    }
    @Override
    public void endElement (String uri, String localName, String qName)//执行多次
            throws SAXException
    {
       if(qName.equals("env")){
           environmentList.add(environment);
       }
       this.tagName=null;
    }
    @Override
    public void characters (char ch[], int start, int length)// 字符串截取,取出你要的内容
            throws SAXException
    {
       if(tagName!=null){
           String data= new String(ch,start,length);
           if(tagName.equals("env")){
               environment.setUrl(data);
           }
       }
    }



}


/**
 * Created with IntelliJ IDEA.
 * User: WEISHI
 * Date: 14-6-18
 * Time: 下午23:00
 * To change this template use File | Settings | File Templates.
 */
import org.xml.sax.SAXException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;


public class Run {
    public static void main(String[] args) throws SAXException, ParserConfigurationException, IOException {
        SAXParser saxParser=null;
        saxParser=SAXParserFactory.newInstance().newSAXParser();
        Myparse myparse=new Myparse();
        //System.out.println(Run.class.getResource("Environment.xml")); 获取编译好的 classes 文件夹下的文件路径
        InputStream stream=Run.class.getResourceAsStream("Environment.xml");
        saxParser.parse(stream,myparse);
        List<Environment> list=myparse.getEnvironmentList();
        for(Environment environment : list){
             System.out.println(environment.getId()+"---"+environment.getUrl()); //只获取 Environment的 id 和 url 属性
        }

    }



}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值