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

来源:互联网 发布:做工瑕疵问题淘宝判罚 编辑:程序博客网 时间:2024/06/05 15:57
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+="\r\n\t"+nodeName+(i++)+"\r\n\t\t";String elementContent=nextContentM.group(1);Matcher elementM=match(elementRegex,elementContent);while(elementM.find()){outStr+=elementM.group(1).replace("<", "")+":"+elementM.group(2)+"\r\n\t\t";}}}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);}}

原创粉丝点击