目标:解析books.xml文档并输出图书信息
1. 解析器Parser
首先解析XML文件之前要理解 解析器Parser是个什么东西
所谓 parser,一般是指把某种格式的文本(字符串)转换成某种数据结构的过程。最常见的> parser,是把程序文本转换成编译器内部的一种叫做“抽象语法树”(AST)的数据结构。我们用记事本写的xml只是文本文件,
简单说,文本文件使用parser解析后才是代码 好比1+2经过解析后编译器才知道这里有两个数1 ,2 然后相加了
所以解析一个xml文档要3个类DBF-DB 最后才得到Document
//newInstance声明 获得一个剖析器parser
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//DocumentBuilder得到一个文档剖析器实例
DocumentBuilder db =dbf.newDocumentBuilder();
//从XML得到一个文档
Document document=db.parse("books.xml");
DocumentBuilderFactory官方定义
用于创建解析器;
DocumentBuilder官方定义
用于创建将XML转换为文档Document的文档解析器;
因而先要从Factory里面创建一个解析器,再创建具体的文件解析器,再得到文档;
2.XML三种类型Node是什么和不同
<book name="属性">我是文本,会被识别为TextNode</book>
<></>
这是一个ElementNode
id=”1”这一对键值对是Attribute Node
之间的纯文本会被识别为一个子节点 TextNode
他们对应的属性名和属性值
Document document=db.parse("books.xml");
//遍历循环获得所有的book Element
NodeList books=document.getElementsByTagName("book");
for (int i=0;i<books.getLength();i++) {
//强转 从Node类型转换为Element类型 每个book是一个Element
Element book=(Element) books.item(i);
//Element getNodeName有返回值(book) 没有Value;
String EleName=book.getNodeName();
//读取Element里的Attribute Node 可以用属性名来得到属性值
//也可以用getAttributes()得到所有属性给NamedNodeMap得到Attribute键值对
//Name-属性名 Value-属性值
String attrValue=book.getAttribute("id");
System.out.println("Element属性名:"+EleName);
System.out.println("Attribute属性值:"+attrValue);
//ChildNode得到字节点
NodeList ChildNode=book.getChildNodes();
for(int k=0;k<ChildNode.getLength();k++){
//中间有文本空白 会被识别为TextNode 属性名为#Text 属性值为文本内容
//判断是ElementNode 输出属性名 当然还是没有属性值
if(ChildNode.item(k).getNodeType()==Node.ELEMENT_NODE){
//中间文本会被当做第一个子节点
// System.out.println(ChildNode.item(k).getNodeName()+" "+ChildNode.item(k).getFirstChild().getNodeValue());
//也可以直接读取Element间文本内容;
System.out.println(ChildNode.item(k).getNodeName()+" "+ChildNode.item(k).getTextContent());
}
}