📄 parsexml.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 + -