这学期选了软件设计模式这个课程,在学习“工厂模式”时,老师让我们课下学习XML和Class,这篇文章,简单的总结了一下我学习XML中用DOM的方式解析的过程,表述不完善或不恰当的地方,还请保函和指正。
XML文件
现在流行的解析XML文件的方法有很多,主流的有四种DOM、SAX、JDOM和DOM4J,由于JDK自带DOM的解析包,我就只试了第一种。
首先来看一下编写XML文件,可以通过命令来写,也可以直接编辑XML文件,并把编写好的XML文件放在工作目录下。
XML的存储结构为树;其实每次我们获取的就是树节点的内容,文件框架是:
<?xml version=”1.0” encoding=”UTF-8”?> //同用语句
<节点名>
<节点名>
…….//可以不断嵌套
</节点名>
</节点名>
我们就上面这张图来写一下XML文件
<?xml version=”1.0” encoding =“UTF-8”?>
<Class>
<info>美女</info>//在树中是同一级的缩进相同,例如这里的info与student
<student> //嵌套子节点
<Name>小乔</Name>
//实例写在节点之间,也可以写成<Name id=”小乔”></Name>
<sex>女</sex>
<age>21</age>
</student>
</Class>
编辑完了XML文件,我们就来开一下如何解释并访问XML文件,
以上是通过DOM来解析文件的代码,我们直接把它写在一个类里(通用),其中parse方法就是我们真正用到的解释文件的方法,返回类型是Document。
下面开始编写我们自己的文件,(还是以树图的例子)
XML文件的内容有三种类型
Text:
Element:
public static void main(String[] args) {
DOMParserparser = new DOMParser();
Document document = parser.parse("Filename(文件名).xml");
//parse的返回对象是Document,赋予一个引用对象
//从根节点开始读,每一个<>节点的类型都是Element
ElementrootElement = document.getDocumentElement();
//traversechild elements
NodeListnodes = rootElement.getChildNodes();
//每一个节点都有一个getChildNodes()的方法,将所有的子节点返回到一个NodeList当中
for (inti=0; i < nodes.getLength(); i++)
//每一个节点列表对象都有一个getLength()的方法,返回其中的节点数,用于遍历。
{
Node node = nodes.item(i);
//要访问具体的哪一个子节点,我们是用的是节点中item(i)方法,i=0,1,2…node.getLength();
//接下来,看看如何返回节点名和节点值;
String nodename=node.getNodeName();//返回节点名
Stringnode=node.getNodeValue();//如果在这里对应我们之前编写的xml文件会返回一个null,原因是我们并没有把具体的值放进<>里,而是把它当成了一个子节点,例如xml文件中的‘小乔’,因此对应的Name这个节点的值其实为null。
//要想访问‘小乔’这个值,我们把‘小乔’再赋给一个节点,再用getNodeValue()的方法返回一个值就可以了。如果不想那么麻烦,就改写xml文件,把Name,sex,age当成student的属性,这样就可以通过访问属性值的方法返回具体的值。
}
}
NodeList nodeList=rootElement.getElementsByTagName("book");
if(nodeList != null)
{
for(int i = 0 ; i < nodeList.getLength(); i++)
{
Element element = (Element)nodeList.item(i);
String id = element.getAttribute("id");
}
}
}
}
学习文件:http://www.ibm.com/developerworks/cn/xml/dm-1208gub/