jaxp对xml的增删改查
(1)首先我需要一个java SDK API 文档
有一个在线的java sdk 1.6 api文档,网址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
(2)在javax.xml.parsers包,由包的名称可以知道这个就是xml解析的包,里面有四个类
DocumentBuilder和DocumentBuilderFactory两个是基于DOM模式解析
后两个类是基于SAX模式解析
(3)新建一个包,利用上面的包解析xml
例如xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?><persons> <person> <name>小明</name> <age>24</age> </person> <person> <name>小红</name> <age>23</age> <sex>female</sex></person> </persons>
解析的java文件
package cn.yangying.jaxptest; 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.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.SAXException; /** * 便利xml文件获取name标签 * @author yangying * */ public class TestJaxp { public static void main(String[] args) throws Exception { //selectAll(); //addElement(); traverse(); } //遍历所有节点 private static void traverse() throws Exception{ /* * 1.创建解析器工厂 * 2.创建解析器 * 3.获取xml文件 * * 4.获取所有的DOM节点 * 5.遍历打印 */ //创建解析器工厂 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); //创建解析器 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); //获取xml文件 Document document = documentBuilder.parse("src/1.xml"); //遍历节点 list1(document); } //递归遍历子节点 private static void list1(Node node){ if(node.getNodeType() == node.ELEMENT_NODE){ System.out.println(node.getNodeName()); } //获取所有节点 NodeList childList = node.getChildNodes(); //遍历打印 for(int i=0; i<childList.getLength(); i++){ Node item = childList.item(i); list1(item); } } //添加节点 private static void addElement() throws Exception { /* * 1.创建解析器工厂 * 2.创建解析器 * 3.获取xml文件 * * 4.创建<sex>标签 * 5.创建文本节点 * 6.文本节点付给<sex>节点子元素 * 7.查询到person节点 * 8.将sex节点付给person子元素 * (发现xml文件没变化,因为我们只是改变了DOM内存的树形结构) * * 9.会写到xml文件 */ //创建解析器工厂 DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance(); //创建解析器 DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder(); //获取xml文件 Document document = documentBuilder.parse("src/1.xml"); Element sexElem = document.createElement("sex"); Text sexText = document.createTextNode("female"); sexElem.appendChild(sexText); NodeList personList = document.getElementsByTagName("person"); for(int i=0; i< personList.getLength(); i++){ personList.item(i).appendChild(sexElem); } TransformerFactory transformerfactory = TransformerFactory.newInstance(); Transformer transformer = transformerfactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/1.xml")); } //查找元素 private static void selectAll() throws Exception { /* * 1.创建解析器器工厂 * 2.创建解析器 * 3.获取xml文件 * * 4.获取所以节点为name的标签 * 5.遍历打印 */ //创建解析器工厂 DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance(); //创建解析器 DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder(); //获取xml文件 Document document = documentBuilder.parse("src/1.xml"); //获取所有节点为name的标签 NodeList list = document.getElementsByTagName("name"); //便利打印 for(int i=0; i<list.getLength(); i++){ Node node = list.item(i); String s = node.getTextContent(); System.out.println(s); } } }