加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

不使用第三方开源包 解析xml(正则解析)

发布时间:2020-12-16 05:21:30 所属栏目:百科 来源:网络整理
导读:package cn.sun.test;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * *@description:解析xml * @author:sunla * @date:2013-8-19上午11:44:12 */public class ParsingXML {/** * 节点正则 */private String nodeRegex="(?!/|?)(.*?
package cn.sun.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 *@description:解析xml
 * @author:sunla
 * @date:2013-8-19上午11:44:12
 */
public class ParsingXML {
	
	/**
	 * 节点正则
	 */
	private String nodeRegex="<(?!/|?)(.*?)>";
	/**节点内容正则*/
	private String nodeContentRegexTemplate="<#node#>(.*?)</#node#>";
	/**元素属性正则*/
	private String elementRegex="s{0,}(.*?)s{0,}=s{0,}"(.*?)"";
	private String outStr="";
	public void parsingXML(String inStr){
		String rootName=firstElementName(nodeRegex,inStr);
		outStr+=rootName;
		String nodeContentRegex=nodeContentRegexTemplate.replace("#node#",rootName);
		Matcher rootContentM=match(nodeContentRegex,inStr);
		while(rootContentM.find()){
			String content=rootContentM.group(1);
			String nodeName=firstElementName(nodeRegex,content);
			String nextNodeContentRegex=nodeContentRegexTemplate.replace("#node#",nodeName);
			Matcher nextContentM=match(nextNodeContentRegex,content);
			int i=1;
			while(nextContentM.find()){
				outStr+="rnt"+nodeName+(i++)+"rntt";
				String elementContent=nextContentM.group(1);
				Matcher elementM=match(elementRegex,elementContent);
				while(elementM.find()){
					outStr+=elementM.group(1).replace("<","")+":"+elementM.group(2)+"rntt";
				}
			}
		}
		System.out.println(outStr);
	}
	
	private Matcher match(String regex,String content){
		Pattern p=Pattern.compile(regex);
		Matcher m=p.matcher(content);
		return m;
	}
	
	/**
	 * 
	 * @Description: 获取匹配的第一个元素 
	 * @param regex
	 * @param content
	 * @return
	 * @return String
	 */
	private String firstElementName(String regex,String content){
		String firstElementName="";
		Matcher m=match(regex,content);
		while(m.find()){
			firstElementName=m.group(1);
			break;
		}
		return firstElementName;
	}
	
	public static void main(String args[]){
	String in = "<?xml version="1.0" ?><Books><Book><Name = "The C++ Programming Language" Author="Bjarne Stroustrup" /></Book><Book><Name = "Effective C++" Author = "Scott Meyers" /></Book></Books>";
	new ParsingXML().parsingXML(in);
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读