最近遇到一些需要读取树形结构配置文件的问题,
当然想起来用XML,但是没有必要用那么复杂的XML语法,
只是写成类似的样子就可以了,于是想借此机会练习一下,
写了个解析的小代码,大虾们看了不要笑话俺。
===============================================
点击这里下载源代码:UploadFiles/2007-4/412116888.rar
===============================================
jdk 1.42
源代码很简单,一共包含三个Class
XML :可以从一个String或一个File中加载XML文件
MarkupNode :标记节点,含有SetProperty()和getProperty()方法
MarkupQueue :一个队列类,联系一下数据结构,顺便在XML类中用一下
XML是mainclass,可以看到运行结果。
==============================================
下面的运行结果里面可以看到MarkupNode的
setProperty()和getProperty()的效果
================================================
测试文件xml.xml内容如下:
<table>
<tr>
<td><a href=www.163.com></a></td>
<td><a href=xh></a></td>
<td><a href=""></a></td>
</tr>
<tr>
<td><a href=""></a></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
================================================
解析结果:
XMLDocumentRoot_xuhua
table
tr
td
a
td
a
td
a
tr
td
a
td
td
tr
td
td
td
堆栈遍历结果如下:
<XMLDocumentRoot_xuhua test1=test1>
<table test1=test1>
<tr test1=test1>
<td test1=test1>
<a href=www.163.com test1=test1>
<td test1=test1>
<a href=xh test1=test1>
<td test1=test1>
<a href="" test1=test1>
<tr test1=test1>
<td test1=test1>
<a href="" test1=test1>
<td test1=test1>
<td test1=test1>
<tr test1=test1>
<td test1=test1>
<td test1=test1>
<td test1=test1>
===================================================
代码摘录:
XML.java
==========================================
XML xml = new XML(); //创建一个对象
//strxml是一段测试用的xml标记代码
String strxml = "<a a=1 b=2 c=3><c><d></d><e></e></c><系部 名称=\"计算机系\"><学生 姓名=\"王旭华\">hehe</学生><学生 姓名=\"张营\">haha</学生></系部></a>";
MarkupNode droot1 = xml.LoadXML(strxml); //droot1中就有了这个树形结构
File fxml = new File("xml.xml");
MarkupNode droot2 = xml.LoadXML(fxml); //droot2中有xml.xml文件的树形结构
=============================================
MarkupNode.java
==============================================
import java.util.*;
public class MarkupNode {
public String m_name; //标记名称
public MarkupNode m_parent_node; //父节点
public Vector m_child_vector; //子节点集合
private Hashtable m_property_hashtable; //属性集合
/**
* Method MarkupNode
*
* 这是一个 标记节点
*/
public MarkupNode() {
// TODO: 在这添加你的代码
m_name = "";
m_parent_node = null;
m_child_vector = new Vector();
m_property_hashtable = new Hashtable();
}
/**
* Method removeProperty
*
*
* @return
*
*/
public String removeProperty(String strkey) {
// TODO: