为了修改与添加方便,将干员的信息放在简历类 Resume 中,简历信息使用 xml 文件存储,在启动时加载进来。
本项目连载 github 库地址
参考链接
解析 xml 文件
需要 import 进来的内容如下,jdk1.8 全部自带,不需要额外下载。
1 2 3 4 5 6
| import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
|
获取文档对象
解析方式如下:
- 首先获取一个工厂类(
DocumentBuilderFactory
)实例,使用了单例模式所以得用newInstance()
来获取全局对象
- 再用获得的工厂对象来创建文档解析器(
DocumentBuilder
)
- 最后才能够利用文档解析器来解析文档(
Document
)
1 2 3 4 5
| String path = "Melantha.xml";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(path);
|
这里DocumentBuilder
对象的parse()
方法可以直接传入 String 类型的字符串文件路径,也可以传入文件对象,例如:
1 2 3 4 5 6 7
| import java.io.File; String path = "Melantha.xml"; File f=new File(path);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(f);
|
DOM 方式获取文档数据
此处引用自:Java DOM 简介-w3cSchool
例如,我们有以下 xml 结构:
1
| <yourTag>This is an <bold>important</bold> test.</yourTag>
|
DOM 节点的层级如下,其中每行代表一个节点:
1 2 3 4 5
| ELEMENT: yourTag + TEXT: This is an + ELEMENT: bold + TEXT: important + TEXT: test.
|
yourTag
元素包含文本,后跟一个子元素,后跟另外的文本。
节点类型
为了支持混合内容,DOM 节点非常简单。标签元素的“内容”标识它是的节点的类型。
例如, 节点内容是元素yourTag
的名称。
DOM 节点 API 定义nodeValue()
,nodeType()
和nodeName()
方法。
对于元素节点< yourTag>
nodeName()返回 yourTag,而 nodeValue()返回 null。
对于文本节点+ TEXT:这是一个
nodeName()返回#text,nodeValue()返回“This is an”。
虽然这里写的用nodeValue()
,但现在用的是getValue()
这样子的方法。
载入单份 xml 文件示例代码
需要解析的 xml 文件的内容:
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="utf-8"?> <resume> <name>玫兰莎</name> <star>3</star> <chat>......玫兰莎。从现在起,我的利刃将为您所用。</chat> <portrayal>image/Melantha.jpg</portrayal> </resume>
|
代码部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
public Resume loadResume(String path) { Resume resume = null; try{ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(path);
String nameString= doc.getElementsByTagName("name").item(0).getFirstChild().getNodeValue(); String starString= doc.getElementsByTagName("star").item(0).getFirstChild().getNodeValue(); int starInt = Integer.valueOf(starString); String chatString= doc.getElementsByTagName("chat").item(0).getFirstChild().getNodeValue(); String portrayalString= doc.getElementsByTagName("portrayal").item(0).getFirstChild().getNodeValue();
resume = new Resume(nameString, starInt, chatString, portrayalString); resume.show(); }catch(Exception e){ e.printStackTrace(); }
return resume; }
|