XML解析——jaxp
*jaxp的api查看
*jaxp是javase的一部分
*jaxp解析器在jdk的javax.xml.parsers包裏面
**四個類:分別是針對dom和sax技術解析使用的類
**dom
DocumentBuilder:解析器類
-這個類是一個抽象類,不能new
-這個類的實例可以從DocumentBuilderFactory.newDocumentBuilder()方法獲取
-這個類具有一個方法可以解析xml,即parse(“xml路徑”),返回的是Document整個文檔
-返回的Document是一個接口,父節點是Node,如果在document裏面找不到想要的方法,到Node裏面去找
***Document裏面的常用方法:
-getElementsByTagName(String tagname)
-這個方法可以得到標簽,返回集合NodeList
-createElement(String tagname)
-創建標簽
-createTextNode(String data)
-創建文本
-appendChild(Node newChild)
-把文本或標簽添加到標簽下面
-removeChild(Node oldChild)
-刪除節點
-getParentNode()
-獲取父節點
**NodeList集合(list)
- getLength() 得到集合的長度
- item(int index) 根據下標取到具體的值
for(int i=0;i<list.getLength( );i++){
list.item( i );
}
DocumentBuilderFactory:解析器工廠
-這個類也是一個抽象類,不能new
-通過本身的newInstance()獲取DocumentBuilderFactory的實例
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <persion> <p> <name>fangwenhui</name> <age>20</age> <sex>boy</sex> </p> <p> <name>fangwenbin</name> <age>23</age> <sex>boy</sex> </p> </persion>
**使用jaxp實現查詢操作
**查詢xml中所有name元素的值
/*
* 1、創建解析器工廠
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance( );
* 2、根據解析器工廠創建解析器
DocumentBuilder builder=builderFactory.newDocumentBuilder( );
* 3、解析xml得到document對象
Document document=builder.parse("src/persion.xml");
* 4、得到所有的name元素
使用document.getElementsByTagName("name");
* 5、返回集合,遍歷集合,得到所有的name元素
- 遍歷 getLength() item()
- 得到元素裏面的值 使用 getTextContent()
*/
**查詢xml中第一個name元素的值
/*
* 1、創建解析器工廠
* 2、根據解析器工廠創建解析器
* 3、解析xml得到document對象
* 4、得到所有的name元素
* 5、返回集合,使用集合裏的方法item(),根據下標獲取具體的元素
-NodeList.item(下標):集合下標從0開始
* 6、得到具體的值 使用 getTextContent()方法
*/
**使用jaxp實現添加節點操作
**在第一個p標簽下(末尾)添加<height>172</height>
/*
* 1、創建解析器工廠
* 2、根據解析器工廠創建解析器
* 3、解析xml文件得到document對象
* 4、得到第一個p標簽
* 5、創建屬性標簽 createElement
* 6、創建文字內容節點 createTextNode
* 7、將文字內容節點添加到標簽下 appendChild
* 8、將標簽添加到第一個p標簽下 appendChild
* 9、回寫xml
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
transformer.transform(new DOMSource(document),new StreamResult("src/persion.xml"));
*/
**使用jaxp實現刪除節點操作
**刪除<height>172</height>節點
/*
* 1、創建解析器工廠
* 2、根據解析器工廠創建解析器
* 3、解析xml文件得到document對象
* 4、獲取height元素
* 5、獲取height的父節點,使用getParentNode()方法
* 6、刪除使用其父節點刪除,使用removeChild()方法
* 7、回寫xml
*/
**使用jaxp實現遍歷節點操作
**遞歸遍歷的方法
/*
* 1、創建解析器工廠
* 2、根據解析器工廠創建解析器
* 3、解析xml文件得到document對象
* 4、調用方法:list1(document)
*/
private static void list1(Node node) { //判斷是元素類型的時候才打印 if(node.getNodeType()==Node.ELEMENT_NODE) System.out.println(node.getNodeName()); //得到一層子節點 NodeList list=node.getChildNodes(); //遍歷list for(int i=0;i<list.getLength();i++){ //得到每一個節點 Node child=list.item(i); //遞歸調用 list1(child); } }
**sax
SAXParser:解析器類
SAXParserFactory:解析器工廠
XML解析——jaxp