对于xml文件的操作,java给出了很多种方法~ 包括sun公司自己的api和第三方的
1.JAXP 2.SAX 3.dom4j
1.JAXP
DocumentBuilderFactory
定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
package com.ahu.xml; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Demo1 { //得到xml文件的参数 @Test public void test() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/test.xml"); NodeList list = document.getElementsByTagName("name"); Node node = list.item(0); System.out.println(node.getTextContent()); } //得到xml文件的属性值 @Test public void test1() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/test.xml"); NodeList list = document.getElementsByTagName("name"); Element el = (Element) list.item(0); System.out.println(el.getAttribute("id")); } }
package com.ahu.xml; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; 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; public class Demo2 { //对xml文件的增删改 //对xml文件内增加节点 @Test public void add() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/test.xml"); //创建新的节点 Element price = document.createElement("price"); price.setTextContent("100"); Element book = (Element) document.getElementsByTagName("book").item(0); book.appendChild(price); //存入文件 Transformer former = TransformerFactory.newInstance().newTransformer(); former.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/test.xml"))); } //对xml文件内指定位置增加节点 @Test public void add1() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/test.xml"); //创建新的节点 Element price = document.createElement("price"); price.setTextContent("100"); //得到参考节点 Element price1 = (Element) document.getElementsByTagName("price").item(0); //得到父节点 Element book = (Element) document.getElementsByTagName("book").item(0); book.insertBefore(price, price1); //存入文件 Transformer former = TransformerFactory.newInstance().newTransformer(); former.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/test.xml"))); } //对xml文件内删除节点 @Test public void delete() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/test.xml"); //得到要删除的节点 Element price = (Element) document.getElementsByTagName("price").item(0); //得到要删除节点的父节点 Element book = (Element) document.getElementsByTagName("book").item(0); //删除 book.removeChild(price.getParentNode()); //存入文件 Transformer former = TransformerFactory.newInstance().newTransformer(); former.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/test.xml"))); } //对xml文件内节点进行修改 @Test public void edit() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/test.xml"); //得到需要修改的节点信息 Element price = (Element) document.getElementsByTagName("price").item(0); price.setTextContent("100"); //存入文件 Transformer former = TransformerFactory.newInstance().newTransformer(); former.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/test.xml"))); } }
2.SAX
定义工厂 API,使应用程序能够配置和获取基于 SAX 的解析器以解析 XML 文档。
package com.ahu.sax2xml; public class Book { private String name ; private String autor; private String price ; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAutor() { return autor; } public void setAutor(String autor) { this.autor = autor; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } }
3.dom4jpackage com.ahu.sax2xml; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.junit.Test; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class Demo { @Test public void test() throws ParserConfigurationException, SAXException, Exception { //1.创建解析工厂 SAXParserFactory factory = SAXParserFactory.newInstance(); //2.得到解析器 SAXParser sp = factory.newSAXParser(); //3.得到读取器 XMLReader reader = sp.getXMLReader(); //4.设置内容处理器 BeanListHandler handler = new BeanListHandler(); reader.setContentHandler(handler); //5.读取xml文档内容 reader.parse("src/test.xml"); List list = handler.getBooks(); Book book ; for(int i = 0 ;i<list.size();i++){ book = (Book)list.get(i); System.out.println(book.getAutor()); System.out.println(book.getName()); System.out.println(book.getPrice()); } } } class BeanListHandler extends DefaultHandler { private List list = new ArrayList(); private String currentTag; private Book book; @Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { currentTag = name; if("book".equals(currentTag)) { book = new Book(); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { if("name".equals(currentTag)){ book.setName(new String(ch,start,length)); } if("autor".equals(currentTag)){ book.setAutor(new String(ch,start,length)); } if("price".equals(currentTag)){ book.setPrice(new String(ch,start,length)); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if("book".equals(qName)){ list.add(book); book = null; } currentTag = null; } public List getBooks() { return list; } }
package com.ahu.dom4j; import java.io.FileOutputStream; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; public class Demo { //在xml文件中的指定位置添加数据 @Test public void add() throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read("src/test.xml"); Element book = document.getRootElement().element("book"); List list = book.elements(); //增加新的节点 Element price = DocumentHelper.createElement("price"); price.setText("290"); list.add(2, price); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileOutputStream("src/test.xml"),format); writer.write( document ); writer.close(); } //删除指定位置的节点 @Test public void delete() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read("src/test.xml"); Element price = document.getRootElement().element("book").element("price"); price.getParent().remove(price); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileOutputStream("src/test.xml"),format); writer.write( document ); writer.close(); } //更新指定节点的内容 @Test public void Update() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read("src/test.xml"); Element book = (Element) document.getRootElement().elements("book").get(1); book.element("autor").setText("ahu"); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileOutputStream("src/test.xml"),format); writer.write( document ); writer.close(); } }