1. 程式人生 > >XML解析——jaxp

XML解析——jaxp

jaxp基本操作 xml解析之jaxp

前面我們提到了xml解析的技術有兩種:dom 和 sax,解析器對於不同的公司和組織也有所不同,sun公司的jaxp,dom4j組織的dom4j,jdom組織的jdom,今天我們就來了解一下sun公司的jaxp解析器是如何解析xml的;

*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