16、实体的定义
* 语法:<!ENTITY 实体名称 "实体的值">
*** <!ENTITY TEST "HHHH">
*** 使用实体 &实体名称; 比如&TEST;
** 注意
* 定义实体需要写在内部dtd里面。
如果写在外部dtd里面 有些浏览器内容得不到
17、xml的解析的简介
* xml是标记型文档
* js使用dom解析标记型文档
- 根据html的层级结构,在内存中分配一个树形结构,把html的标签,属性和文本封装成对象
* xml的解析方式(技术): dom 和 sax
* 使用dom,如果文件过大,造成内存溢出
优点,很方便实现增删改操作
* sax解析
采用事件驱动,边读边解析
从上到下,一行一行的解析,解析到某一个对象,把对象名称返回
使用sax方式,不会造成内存溢出,实现查询
* 使用sax方式,不能实现增删改操作
* 想要解析xml,首先需要解析器
** 不同的公司和组织提供了 针对dom和sax方式的解析器,通过api方式提供
*** sun公司, 针对dom和sax jaxp
*** dom4j组织 针对dom和sax dom4j(实际开发中使用多)
*** jdom组织 针对dom和sax jdom
18、jaxp的api的查看
** jaxp是javase的一部分
** jaxp解析器在jdk的javax.xml.parsers包里面
** 四个类:分别是针对dom和sax解析使用的类
*** dom:
DocumentBuilder:解析器类
- 这个类是抽象类
- parse("xml路径") 返回的documnet是接口 父节点是node
- 在document里面有方法可以得到标签
DocumnetBuilderFactory 解析器工厂
- 抽象类
*** sax:
SAXParsers
19、使用jaxp实现查询操作
* 查询xml中所有name元素的值
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("src/person.xml");
NodeList list = document.getElementsByTagName("name");
for(int i=0;i<list.getLength();i++){
Node name = list.item(i);
String s =name.getTextContent();
System.out.println(s);
}
20、用jaxp来添加节点
* 在第一个p1的下面添加<sex>nv</sex>
加了之后是在内存中的添加。我们需要回写
** Transformer.transform*
21、用jaxp遍历节点
//前三步固定
//得到根节点
//得到根节点子节点,得到。。。使用递归来实现
实现一个方法来实现递归操作
list(Node){
if(node.getNodeType() == Node.Element_NODE){
system.out.print(node.getNodeName());
}
nodelist list = node.getChildNodes;
for(int i=0;i<list.getLength();i++{
Node node1 = list.item(i);
list1(node1);
}
}