日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAXP操作xml

發布時間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAXP操作xml 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自? ?JAXP操作xml

DOM對象詳解
1.基本的DOM對象

DOM的基本對象有5個:Document,Node,NodeList,Element和Attr。下面就這些對象的功能和實現的方法作一個大致的介紹。

Document 對象代表了整個XML的文檔,所有其它的Node,都以一定的順序包含在Document對象之內,排列成一個樹形的結構,程序員可以通過遍歷這顆樹來得 到XML文檔的所有的內容,這也是對XML文檔操作的起點。我們總是先通過解析XML源文件而得到一個Document對象,然后再來執行后續的操作。此 外,Document還包含了創建其它節點的方法,比如createAttribut()用來創建一個Attr對象。它所包含的主要的方法有:

createAttribute(String):用給定的屬性名創建一個Attr對象,并可在其后使用setAttributeNode方法來放置在某一個Element對象上面。

createElement(String):用給定的標簽名創建一個Element對象,代表XML文檔中的一個標簽,然后就可以在這個Element對象上添加屬性或進行其它的操作。

createTextNode(String):用給定的字符串創建一個Text對象,Text對象代表了標簽或者屬性中所包含的純文本字符串。如果在一個標簽內沒有其它的標簽,那么標簽內的文本所代表的Text對象是這個Element對象的唯一子對象。

getElementsByTagName(String):返回一個NodeList對象,它包含了所有給定標簽名字的標簽。

getDocumentElement():返回一個代表這個DOM樹的根節點的Element對象,也就是代表XML文檔根元素的那個對象。

Node 對象是DOM結構中最為基本的對象,代表了文檔樹中的一個抽象的節點。在實際使用的時候,很少會真正的用到Node這個對象,而是用到諸如 Element、Attr、Text等Node對象的子對象來操作文檔。Node對象為這些對象提供了一個抽象的、公共的根。雖然在Node對象中定義了 對其子節點進行存取的方法,但是有一些Node子對象,比如Text對象,它并不存在子節點,這一點是要注意的。Node對象所包含的主要的方法有:

appendChild(org.w3c.dom.Node):為這個節點添加一個子節點,并放在所有子節點的最后,如果這個子節點已經存在,則先把它刪掉再添加進去。

getFirstChild():如果節點存在子節點,則返回第一個子節點,對等的,還有getLastChild()方法返回最后一個子節點。

getNextSibling():返回在DOM樹中這個節點的下一個兄弟節點,對等的,還有getPreviousSibling()方法返回其前一個兄弟節點。

getNodeName():根據節點的類型返回節點的名稱。

getNodeType():返回節點的類型。

getNodeValue():返回節點的值。

hasChildNodes():判斷是不是存在有子節點。

hasAttributes():判斷這個節點是否存在有屬性。

getOwnerDocument():返回節點所處的Document對象。

insertBefore(org.w3c.dom.Node new,org.w3c.dom.Node ref):在給定的一個子對象前再插入一個子對象。

removeChild(org.w3c.dom.Node):刪除給定的子節點對象。

replaceChild(org.w3c.dom.Node new,org.w3c.dom.Node old):用一個新的Node對象代替給定的子節點對象。

NodeList對象,顧名思義,就是代表了一個包含了一個或者多個Node的列表。可以簡單的把它看成一個Node的數組,我們可以通過方法來獲得列表中的元素:

GetLength():返回列表的長度。

Item(int):返回指定位置的Node對象。

Element對象代表的是XML文檔中的標簽元素,繼承于Node,亦是Node的最主要的子對象。在標簽中可以包含有屬性,因而Element對象中有存取其屬性的方法,而任何Node中定義的方法,也可以用在Element對象上面。

getElementsByTagName(String):返回一個NodeList對象,它包含了在這個標簽中其下的子孫節點中具有給定標簽名字的標簽。

getTagName():返回一個代表這個標簽名字的字符串。

getAttribute(String): 返回標簽中給定屬性名稱的屬性的值。在這兒需要主要的是,應為XML文檔中允許有實體屬性出現,而這個方法對這些實體屬性并不適用。這時候需要用到 getAttributeNodes()方法來得到一個Attr對象來進行進一步的操作。

getAttributeNode(String):返回一個代表給定屬性名稱的Attr對象。

Attr 對象代表了某個標簽中的屬性。Attr繼承于Node,但是因為Attr實際上是包含在Element中的,它并不能被看作是Element的子對象,因 而在DOM中Attr并不是DOM樹的一部分,所以Node中的getparentNode(),getdivviousSibling()和 getnextSibling()返回的都將是null。也就是說,Attr其實是被看作包含它的Element對象的一部分,它并不作為DOM樹中單獨 的一個節點出現。這一點在使用的時候要同其它的Node子對象相區別。

需要說明的是,上面所說的DOM對象在DOM中都是用接口定義的, DOM其實可以在任何面向對象的語言中實現,只要它實現了DOM所定義的接口和功能就可以了。

2,關于JAXP

  JAXP 開發包是J2SE的一部分,它由javax.xml、org.w3c.dom 、org.xml.sax 包及其子包組成

  在 javax.xml.parsers 包中,定義了幾個工廠類,程序員調用這些工廠類,可以得到對xml文檔進行解析的 DOM 或 SAX 的解析器對象。

使用JAXP進行DOM解析

javax.xml.parsers包中的DocumentBuilderFactory用于創建DOM模式的解析器對象 , DocumentBuilderFactory是一個抽象工廠類,它不能直接實例化,但該類提供了一個newInstance方法 ,這個方法會根據本地平臺默認安裝的解析器,自動創建一個工廠的對象并返回。

獲得JAXP中的DOM解析器

調用 DocumentBuilderFactory.newInstance() 方法得到創建 DOM 解析器的工廠。

調用工廠對象的 newDocumentBuilder方法得到 DOM 解析器對象。

調用 DOM 解析器對象的 parse()方法解析 XML 文檔,得到代表整個文檔的 Document 對象,進行可以利用DOM特性對整個XML文檔進行操作了。

更新XML文檔

?

javax.xml.transform包中的Transformer類用于把代表XML文件的Document對象轉換為某種格式后進行輸出,例如把xml文件應用樣式表后轉成一個html文檔。利用這個對象,當然也可以把Document對象又重新寫入到一個XML文件中。

Transformer類通過transform方法完成轉換操作,該方法接收一個源和一個目的地。我們可以通過:

?????????javax.xml.transform.dom.DOMSource類來關聯要轉換的document對象,

?????????用javax.xml.transform.stream.StreamResult 對象來表示數據的目的地。

?Transformer對象通過TransformerFactory獲得。

看一個簡單示例:

Book.xml

<?xmlversion="1.0"encoding="UTF-8"standalone="no"?> <book> <bookname>Java程序設計</bookname> <bookprice>40元</bookprice> <author>lijizh</author> <publisher>lijizh1013</publisher> </book>

Dom.java

package dtd;import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; importjavax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;publicclass Dom {publicstaticvoid main(String[] args) throws ParserConfigurationException,SAXException, IOException {//獲取解析工廠DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//創建解析器對象DocumentBuilder db = dbf.newDocumentBuilder();//獲取Document對象Document d = db.parse("src/dtd/Book.xml");//通過Document對象的方法獲取相應的節點列表NodeList nl = d.getElementsByTagName("bookname");//獲取指定節點Node node = nl.item(0);//獲取指定節點內容String content = node.getTextContent();//輸出內容System.out.println(content);} }

示例完成對XML文件的CRUD操作:

Book.xml

<?xmlversion="1.0"encoding="UTF-8"standalone="no"?> <book> <bookname>Java程序設計</bookname> <bookprice>40元</bookprice> <author>lijizh</author> <publisher>lijizh1013</publisher> </book>

ReadDom.java

package dtd;import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult;import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;publicclass ReadDom {@Testpublicvoid read() throws ParserConfigurationException, SAXException, IOException{DocumentBuilderFactoryfactory = DocumentBuilderFactory.newInstance();DocumentBuilder db =factory.newDocumentBuilder();Document d = db.parse("src/dtd/Book.xml");Node node = d.getElementsByTagName("book").item(0);// System.out.println(node.getNodeName());list(node); }//用此方法遍歷元素節點 private void list(Node node) {if(node instanceof Element){System.out.println(node.getNodeName());}NodeList list = node.getChildNodes();for(int i = 0;i< list.getLength();i++){Node node1 =list.item(i);list(node1);}}@Test//以尾部追加的方式向XML文件中增添數據的方法public void insert() throws ParserConfigurationException, SAXException,IOException, TransformerException{DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();DocumentBuilderdb = factory.newDocumentBuilder();Document d = db.parse("src/dtd/Book.xml"); Element node = (Element)d.getElementsByTagName("book").item(0);Element newNode =d.createElement("color");newNode.setTextContent("red");node.appendChild(newNode);//通過轉換工廠的newInstance()方法獲取工廠實例TransformerFactory tff =TransformerFactory.newInstance();//獲取轉換器Transformer tf =tff.newTransformer();//通過轉換器對象的transform方法將源與目標文件相連接tf.transform(new DOMSource(d),new StreamResult("src/dtd/Book.xml")); }@Test//以向前插入的方式向XML文件中增添數據的方法publicvoid insert1() throws ParserConfigurationException, SAXException, IOException,TransformerException{DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder db = factory.newDocumentBuilder();Document d = db.parse("src/dtd/Book.xml");Element node = (Element)d.getElementsByTagName("book").item(0);Element newNode = d.createElement("publisher");newNode.setTextContent("lijizh");Element refChild = (Element)d.getElementsByTagName("color").item(0);node.insertBefore(newNode, refChild);TransformerFactory tff = TransformerFactory.newInstance();Transformer tf = tff.newTransformer();tf.transform(new DOMSource(d),new StreamResult("src/dtd/Book.xml"));}@Test//從XML文件中刪除數據的方法publicvoid delete() throws ParserConfigurationException, SAXException, IOException,TransformerException{DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder db = factory.newDocumentBuilder();Document d = db.parse("src/dtd/Book.xml");Element node = (Element)d.getElementsByTagName("color").item(0);Element parent =(Element)node.getParentNode();parent.removeChild(node);TransformerFactory tff = TransformerFactory.newInstance();Transformer tf = tff.newTransformer();tf.transform(new DOMSource(d),new StreamResult("src/dtd/Book.xml"));}@Test從XML文件中更新數據的方法publicvoid update() throws ParserConfigurationException, SAXException, IOException,TransformerException{DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder db = factory.newDocumentBuilder();Document d = db.parse("src/dtd/Book.xml");Element node = (Element)d.getElementsByTagName("publisher").item(0);node.setTextContent("lijizh1013"); TransformerFactory tff = TransformerFactory.newInstance();Transformer tf = tff.newTransformer();tf.transform(new DOMSource(d),new StreamResult("src/dtd/Book.xml"));}}}

總結

以上是生活随笔為你收集整理的JAXP操作xml的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。