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);
}
}