⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parsexml.java

📁 短信网关发送接受平台。
💻 JAVA
字号:
package XML;
import java.util.*;
import java.io.*;

public class ParseXML{
	private String xmlStr="";
	//private Vector subTags=new Vector();
	//private Vector elements=new Vector();
	//private Vector attributes=new Vector();
	public Vector keySets=new Vector();

	public ParseXML(){
	}

	public ParseXML(String root){
		//this.root=root;
	}

	public void parse(String xml){
                this.xmlStr=xml;
		if (!isValid()){
			return ;//null;
		}
		StringTokenizer st=new StringTokenizer(xml,"<>");
		Stack stack=new Stack();

		while(st.hasMoreTokens()){
			stack.push(st.nextToken().trim());
		}
		getXMLKey(stack);
		//while(!stack.empty()){
		//	System.out.println((String)stack.pop());
		//}
	}

	public void getXMLKey(Stack stack){
		XMLStack parent=new XMLStack();
		StringTokenizer st1;
		String temp="";
		String localName="";
                String value="";

		while (!stack.empty()){
			temp=(String)stack.pop();

			if (temp.startsWith("/")){
				//结束标记
				localName=temp.substring(1);
				parent.push(localName);
			}else if(!temp.startsWith(parent.peek())){
				//是元素值
                                if(temp.endsWith("/")){
				        //空元素,如<msg_fmt/>
				        temp=temp.substring(0,temp.indexOf("/"));
                                        temp=temp.trim();
                                        XMLKey key;
				        //String attrs=temp.substring(parent.pop().length(),temp.indexOf("/"));
				        if(temp.indexOf(" ")!=-1){
                                                key=new XMLKey(parent.createKey()+"/"+temp.substring(0,temp.indexOf(" ")),"");
                                                String attrs=temp.substring(temp.indexOf(" "));
					        getAttributes(parent.createKey()+"/"+temp.substring(0,temp.indexOf(" ")),attrs);
				        }else{
                                                key=new XMLKey(parent.createKey()+"/"+temp,"");
                                        }
                                        this.keySets.add(key);
                                 }else{
                                       //是元素值
				       value=temp;
                                 }
			}else if(temp.startsWith(parent.peek())){
                                        if(!parent.isTag()){
				              //是开始标记,有属性
                                              XMLKey key=new XMLKey(parent.createKey());
				              key.setValue(value);
				              this.keySets.add(key);
				        }
                                        if(temp.length()>parent.peek().length()){
					       String attrs=temp.substring(parent.peek().length());
					       getAttributes(parent.createKey(),attrs);
                                        }
				        parent.pop();
                                        value="";
                        }
		}
	}


	private void getAttributes(String parent,String attStr){
		Vector atts=Attribute.getAttributes(attStr);
		XMLKey key;
		Attribute attribute;
		for (int i=0;i<atts.size();i++){
			attribute=(Attribute)atts.elementAt(i);
			key=new XMLKey(parent+"."+attribute.name,attribute.value);
			this.keySets.add(key);
		}
	}

	public boolean isValid(){
		//未写验证XML串有效性
		return true;
	}

        //找出相应键的键值
        protected XMLKey getXMLKey(String keyName){
                XMLKey key;
                for (int i=0;i<keySets.size();i++){
		        key=(XMLKey)keySets.elementAt(i);
                        //System.out.println("Debug--------in ParseXML.getXMLKey():key="+key);
			if (keyName.equalsIgnoreCase(key.toString())){
                                return key;
                        }
                }
                return null;
        }

	public String getStringValue(String keyName){
		XMLKey key=getXMLKey(keyName);
                if (key==null){
                        //System.out.println("Debug--------in ParseXML.getStringValue():key="+key);
                        return null;
                }else
                        return key.getStringValue();
	}

	public int getIntValue(String keyName){
		XMLKey key=getXMLKey(keyName);
                if (key==null)
                        return 0;
                else
                        return key.getIntValue();
	}

	public long getLongValue(String keyName){
		XMLKey key=getXMLKey(keyName);
                if (key==null)
                        return 0l;
                else
                        return key.getLongValue();
	}

	public float getFloatValue(String keyName){
		XMLKey key=getXMLKey(keyName);
                if (key==null)
                        return 0.0f;
                else
                        return key.getFloatValue();
	}

	public double getDoubleValue(String keyName){
                XMLKey key=getXMLKey(keyName);
                if (key==null)
                        return 0.0D;
                else
                        return key.getDoubleValue();
	}

        public void release(){
                this.keySets.removeAllElements();
        }

	public static void main(String args[]){
		ParseXML xml=new ParseXML();
                if (args.length<1){
                        System.out.println("usage: java XML.ParseXML file.xml");
                        System.exit(0);
                }
                try{
                        File file=new File(args[0]);
                        FileReader fr=new FileReader(file);
                        BufferedReader br=new BufferedReader(fr);
                        String line="";
                        while ((line=br.readLine())!=null){
                                //xml=new ParseXML();
		                //xml.parse("<packet ip=\"192.168.0.1\" UID=\"dongyu\" PWD=\"hi\"><command>submit</command><dest_terminal_id>13910139946</dest_terminal_id><src_terminal_id>1860</src_terminal_id><message msg_fmt=\"15\"><msg_content>hi,测试!!!</msg_content></message></packet>");
		                //xml.parse("<center type=\"union\" version=\"3.0\" release=\"2002-05-29 09:33:34\">\r\n<company>BeiJing InHand Networking Technology CO.,Ltd.</company>\r\n<authorization abbreviation=\"xiyu\">xi'an xiyu company</authorization><company-site>www.InHand.com.cn</company-site><technology-site>www.SimpleTeam.com</technology-site><telephone>010-64200783</telephone><email>support@inhand.com.cn</email><comment>Once encounting problems, please contact us ASAP !</comment></center><administrator account=\"xiyu\" password=\"xiyu\" listen=\"9000\"><email smtp=\"800j.com.cn\" port=\"25\"><from>chenliang@800j.com.cn</from><to>chenliang@800j.com.cn,han@inhand.com.cn</to></email><mobile>13910139946;13001081371</mobile><log>LOG_ALL</log></administrator>");
		                //xml.parse("<mobile_bill time=\"2002-12-31\"><order_number>00000000000000000000</order_number><service_type>tp</service_type><service_id>tpxz</service_id><src_terminal_id>8613910139946</src_terminal_id><registered_delivery>0</registered_delivery><msg_level>5</msg_level><agent_flag>1</agent_flag><mo_relate_to_mt_flag>2</mo_relate_to_mt_flag><fee_user_type>0</fee_user_type><fee_terminal_id id=\"df\"/><fee_type>01</fee_type><fee_code>000000</fee_code><given_value>0</given_value><valid_time id=\"7\"></valid_time><at_time></at_time><msg_id>00000000000000000</msg_id><pk_total>1</pk_total><pk_number>1</pk_number><tp_pid>0</tp_pid><tp_udhi>0</tp_udhi><msg_fmt>0</msg_fmt><msg_content>this is a test</msg_content><dest_terminal_id>8613910139946</dest_terminal_id><gateway_route>shanxi</gateway_route><gateway_msg_id>3b9d8a7f68g87878</gateway_msg_id><gateway_result>0</gateway_result><gateway_confirmed>0</gateway_confirmed><gateway_status>transmitter</gateway_status><process_flag>processed</process_flag></mobile_bill>");
		                xml.parse(line);
                                XMLKey key;
		                for (int i=0;i<xml.keySets.size();i++){
			                key=(XMLKey)xml.keySets.elementAt(i);
			                System.out.println(key.getName()+"   =   "+key.getStringValue());
		                }
                                //xml.keySets.removeAllElements();
                                System.out.println("-----------------ok!----------------------");
                                System.out.println(xml.keySets.size());
                        System.out.println("/mobile_bill/order_number="+xml.getStringValue("/mobile_bill/order_number"));
                        System.out.println("/mobile_bill.time="+xml.getStringValue("/mobile_bill.time"));
                        System.out.println("/mobile_bill/msg_level="+xml.getIntValue("/mobile_bill/msg_level"));
                        System.out.println("-----------------ok!----------------------");
                                System.out.println("=====================ok!====================");
                        }
                        br.close();
                        fr.close();

                }catch(IOException e){
                        System.err.println("io error!!!");
                }
                System.out.println("ok!");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -