-----------------------------------------------------------------------------------------------------面试题 ST--------------------------------------------------------------------------------------------------------------
(1.)Dom解析和sax的区别:
DOM: 增删改查方便,内存消耗比较大(全部加载进内存再解析)
SAX: 内存消耗小,适合做读取。不适合对做增删改查 (一行一行解析)
(2.)调整jvm内存大小:
Application -- > Run as| Run configures --> VM arguments -Xmx80m
-----------------------------------------------------------------------------------------------------面试题 END--------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------基础知识 ST--------------------------------------------------------------------------------------------------------------
XML: Extensible Markup Language 可扩展标记语言
XML语法:
1. 文档声明
2. 元素
3. 属性
4. 注释
5. CDATA区 , 特殊字符
6. 处理指令(processinginstruction)
例:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在 XML 中,一些字符拥有特殊的意义。
如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 单引号 |
" | " | 引号 |
声明:
防止出现全角空格(会提示无法显示xml页)(可以被浏览器正常打开)
<?xml version="1.0"encoding="UTF-8"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget themeeting!</body>
</note>
元素:
指xml文件中出现的标签
包含标签体:<a>world</a>
不包含标签体:<a></a> 可简写成<a/> 空格和换行会被当作原始内容被解析
命名规范:
XML 命名规则(可使用任何名称,没有保留的字词。)
XML 元素必须遵循以下命名规则:
1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格
注释:
<!-- content -->
CDATA区:
有些内容不想让解析引擎解析,直接放在CDATA区原封不动的输出
语法:<![CDATA[内容]]>
<![CDATA[
<a>
<b></b>
</a>
]]>
处理指令:
简称PI,用来只会解析引擎如何解析XML文档内容
XML约束:
编写一个文档来约束其他xml文件的书写规则
常见的约束技术:(1.)XML DTD (2.)XML Schema
XML解析方式: dom和sax
Dom:文档对象模型
Sax:simple API for XML
主要关注JAXP和 dom4j解析
JAXP 开发包:
由javax.xml,org.w3c.dom,org.xml.sax 及其子包组成
在javax.xml.parse包中,定义了几个工厂类,调用这些工厂类,可以得到xml文档的DOM或者SAX的解析器,从而实现对xml文档的解析
DOM解析下,xml文档的每一个组成部分都会用一个对象表示,例如标签用Element,属性用Attr,但不管什么对象,都是Node的子类,所以在开发中可以把获取到的任意节点都当作Node对待。
-------------------------------------------------------------------------------------------------基础知识END----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------编程ST-----------------------------------------------------------------------------------------------------
文中操作的xml文档为如下:book.xml
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<书架>
<书>
<书名 name="think in java">Think in Java</书名>
<作者>张柬</作者>
<售价>45.08元</售价>
<售价>109元</售价>
<售价>45.08元</售价>
</书>
<书>
<书名>javascript 开发</书名>
<作者>张柬之</作者>
<售价>23.9元</售价>
</书>
</书架>
示例1:
获得文档标签中的内容:
// 获得文档标签中的内容
@Test
public void read1() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档,得到代表文档的document
Document document = builder.parse("src/book.xml");
NodeList nl = document.getElementsByTagName("书名");
Node node = nl.item(1);
String content = node.getTextContent();
System.out.println(content);
}
示例2:
递归 遍历出所有节点:
// 递归 遍历出所有节点
@Test
public void read2() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档,得到代表文档的document
Document document = builder.parse("src/book.xml");
// 得到根节点
Node root = document.getElementsByTagName("书架").item(0);
list(root);
}
private void list(Node node) {
// 输出节点名称
System.out.println(node.getNodeName());
NodeList list = node.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
Node child = list.item(i);
list(child);
}
}
示例3:
得到xml文档中标签属性的值:
// 得到xml文档中标签属性的值
@Test
public void read3() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档,得到代表文档的document
Document document = builder.parse("src/book.xml");
// Node node=document.getElementsByTagName("书名").item(0);
// Node中的方法无法依据属性标签得到name,强转成Element
Element element = (Element) document.getElementsByTagName("书名").item(0);
String name = element.getAttribute("name");
System.out.println(name);
}
示例4:
如何往XML文档中添加数据:
// 如何往XML文档中添加数据
@Test
public void add() throws Exception {
// 创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML文档,得到代表文档的document
Document document = builder.parse("src/book.xml");
// 创建一个节点
Element price = document.createElement("售价");
price.setTextContent("45.08元");
// 把创建的节点挂到第一本书上
Element book = (Element) document.getElementsByTagName("书").item(0);
book.appendChild(price);
// 把更新后内存中的数据添加到xml文档中
// 构建TransformerFactory工厂
TransformerFactory tffactory = TransformerFactory.newInstance();
// 得到转换器
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/book.xml")));
}
示例5:
如何往XML文档中指定位置添加数据:
// 如何往XML文档中指定位置添加数据
@Test
public void add2() throws Exception {
// 创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML文档,得到代表文档的document
Document document = builder.parse("src/book.xml");
// 创建一个节点
Element price = document.createElement("售价");
price.setTextContent("45.08元");
//得到参考节点
Element refNode=(Element) document.getElementsByTagName("售价").item(0);
// 得到要挂载的节点
Element book = (Element) document.getElementsByTagName("书").item(0);
//往book节点的指定位置插入
book.insertBefore(price, refNode);
// 把更新后内存中的数据添加到xml文档中
// 构建TransformerFactory工厂
TransformerFactory tffactory = TransformerFactory.newInstance();
// 得到转换器
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/book.xml")));
}
---------------------------------------------------------------------------------------------编程END-----------------------------------------------------------------------------------------------------