Parse XML Tree如何解析XML文件
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍Parse XML Tree如何解析XML文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Parse XML Tree现在有一个Tokenizer,返回的To
千家信息网最后更新 2025年02月02日Parse XML Tree如何解析XML文件
这篇文章主要介绍Parse XML Tree如何解析XML文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Parse XML Tree
现在有一个Tokenizer,返回的Token都是XML标签或者内容,比如
(open, html)(inner, hello)(close, html)
表示hello
,每一个括号及其内容是一个Token,请问如何表示这个XML文件。
栈法
复杂度
时间 O(N) 空间 O(N)
思路
这题首先要想清楚的是,如何表示XML,因为XML是典型的一父多子,我们用树来表示比较好。然后分析下如何用Tokenizer,Tokenizer有点像Iterator,每当我们用Tokenizer拿到一个Token时,如果这是一个Open的Token,我们需要新建一个节点,这个新节点下面也有可能有新节点。如果是一个Inner的Token,我们也需要新建一个节点,但这个节点下面不会有新的节点。如果是一个Close的Token,我们不需要新节点,而且需要保证上一个Open节点不再接纳新节点了,而对于新节点则要附在上一层的节点后面。这里,我们用栈可以保留上一层的节点信息,帮助我们建树。如果这是一个Open的Token,我们需要新建一个节点加入上一层节点后面,并加入栈中。如果是一个Inner的Token,我们也需要新建一个节点加到上一层节点后面,但不加入栈中。如果是一个Close的Token,则把上一层节点弹出栈。
代码
public class XMLParser { public static void main(String[] args){ XMLParser xml = new XMLParser(); XMLNode root = xml.parse("(open,html)(open,head)(inner,welcome)(close,head)(open,body)(close,body)(close,html)"); xml.printXMLTree(root, 0); } public XMLNode parse(String str){ // 以右括号为delimiter StringTokenizer tknz = new StringTokenizer(str, ")"); Stackstk = new Stack (); // 将第一个open节点作为根节点压入栈中 XMLNode root = convertTokenToTreeNode(tknz.nextToken()); stk.push(root); while(!stk.isEmpty()){ if(!tknz.hasMoreTokens()){ break; } XMLNode curr = convertTokenToTreeNode(tknz.nextToken()); // 得到上一层节点 XMLNode father = stk.peek(); // 根据当前节点的类型做不同处理 switch(curr.type){ // 对于Open节点,我们把它加入上一层节点的后面,并加入栈中 case "open": father.children.add(curr); stk.push(curr); break; // Close节点直接把上一层Pop出来就行了,这样就不会有新的节点加到上一层节点后面 case "close": stk.pop(); break; // Inner节点只加到上一层节点后面 case "inner": father.children.add(curr); break; } } return root; } private XMLNode convertTokenToTreeNode(String token){ token = token.substring(1); String[] parts = token.split(","); return new XMLNode(parts[0], parts[1]); } private void printXMLTree(XMLNode root, int depth){ for(int i = 0; i < depth; i++){ System.out.print("-"); } System.out.println(root.type + ":" + root.value); for(XMLNode node : root.children){ printXMLTree(node, depth + 1); } }}class XMLNode { String type; String value; List children; XMLNode(String type, String value){ this.type = type; this.value = value; this.children = new ArrayList (); }}
以上是"Parse XML Tree如何解析XML文件"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
节点
上一
内容
文件
括号
篇文章
这是
帮助
不同
复杂
清楚
代码
价值
信息
兴趣
典型
复杂度
多子
小伙
小伙伴
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
郑州软件开发工资待遇
工企数据库研发投资数据缺失
看php数据库
湖北专业软件开发推广
小米air软件开发
2020年网络安全周日期
临汾学校触摸互动软件开发公司
网站服务器一般放在汇聚层
想做一名网络安全员怎么做
修复网络技术
智能运维各层次网络技术选型
sum服务器监控
计算机网络安全领域的3a指
cf软件开发
ios orm 数据库
福建省教网络技术的大专
秦淮区常规软件开发专业服务
西瓜星球服务器怎么找生存服
数据库为什么要分组管理
云数据库后端使用什么技术实现
数据库文件备份
用友服务器设置
ddr3服务器能用台式电脑吗
荒野行动哪个服务器好用
网络技术英语预报
如何把数据库备份到阿里云
公司员工工资数据库表
网络推广中的服务器怎么使用
英语词汇量测试软件开发
服务器上网行为管理