如何定义一个 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 属性
}
}
}