jaxp解析xml
2018-01-28 15:01
162 查看
因为jaxp是sun公司推出的一个解析xml的技术,所以在解析xml时,不用像dom4j一样导入jar包。jaxp用到的东西都包含在jre中。使用jaxp的局限性较大,比如不能创建一个xml文件,只能读取已有的文件。
这里简单介绍jaxp对xml的CRUD操作。
要操作的testBook.xml文件
增加一个新书节点。
运行后,testBook.xml为
修改节点:修改第三本书的售价。
运行后xml文档为:
删除节点:删除第三本书。
运行后:
读取节点:遍历节点
运行结果:
这里简单介绍jaxp对xml的CRUD操作。
要操作的testBook.xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <书架> <书 id="b1"> <书名>Book1</书名> <作者>auther1</作者> <售价>50元</售价> </书> <书 id="b2"> <书名>Book2</书名> <作者>auther2</作者> <售价>价格2</售价> </书> </书架>
增加一个新书节点。
public class Demo1 { public static void main(String[] args) throws Exception { //获取Document工厂对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 创建DocumentBuilder对象 DocumentBuilder db = dbf.newDocumentBuilder(); // 获取目标文件,注意路径 Document doc = db.parse("src/xml/dom/jaxp/testBook.xml"); // 创建 书 节点 Element ele = doc.createElement("书"); // 设置属性 ele.setAttribute("id", "b3"); // 增加 书名,作者,售价 节点 Element name = doc.createElement("书名"); // 设置内容 name.setTextContent("Book3"); Element au = doc.createElement("作者"); au.setTextContent("作者3"); Element pr = doc.createElement("售价"); pr.setTextContent("价格3"); // 将3个节点挂到书的节点下 ele.appendChild(name); ele.appendChild(au); ele.appendChild(pr); // 在将 书 节点 挂到根节点下 // 得到根节点 Element root = (Element) doc.getElementsByTagName("书架").item(0); // 挂载 root.appendChild(ele); // 将改变的节点的xml从内存中写到磁盘中,需要转换对象,毕竟不能直接将内存输出是吧。 // 获取转换工厂对象 TransformerFactory tff = TransformerFactory.newInstance(); // 获取转换对象 Transformer tf = tff.newTransformer(); // 将xml对象转为输出流 tf.transform(new DOMSource(doc), new StreamResult(new FileOutputStream("src/xml/dom/jaxp/testBook.xml"))); System.out.println("over"); } }
运行后,testBook.xml为
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <书架> <书 id="b1"> <书名>Book1</书名> <作者>auther1</作者> <售价>50元</售价> </书> <书 id="b2"> <书名>Book2</书名> <作者>auther2</作者> <售价>价格2</售价> </书> <书 id="b3"> <书名>Book3</书名> <作者>作者3</作者> <售价>价格3</售价> </书> </书架>
修改节点:修改第三本书的售价。
public class Demo1 { public static void main(String[] args) throws Exception { // 得到目标文件的document对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse("src/xml/dom/jaxp/testBook.xml"); // 得到要修改的节点 Element ele = (Element) doc.getElementsByTagName("售价").item(2); ele.setTextContent("50元"); // 将xml重新写入磁盘 TransformerFactory tff = TransformerFactory.newInstance(); Transformer tf = tff.newTransformer(); tf.transform(new DOMSource(doc), new StreamResult(new FileOutputStream("src/xml/dom/jaxp/testBook.xml"))); System.out.println("over"); } }
运行后xml文档为:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架> <书 id="b1"> <书名>Book1</书名> <作者>auther1</作者> <售价>50元</售价> </书> <书 id="b2"> <书名>Book2</书名> <作者>auther2</作者> <售价>价格2</售价> </书> <书 id="b3"> <书名>Book3</书名> <作者>作者3</作者> <售价>50元</售价> </书> </书架>
删除节点:删除第三本书。
public class Demo1 { public static void main(String[] args) throws Exception { // 得到目标文件的document对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse("src/xml/dom/jaxp/testBook.xml"); // 得到第二本书 Element ele = (Element) doc.getElementsByTagName("书").item(2); // 删除节点 ele.getParentNode().removeChild(ele); // 将xml重新写入磁盘 TransformerFactory tff = TransformerFactory.newInstance(); Transformer tf = tff.newTransformer(); tf.transform(new DOMSource(doc), new StreamResult(new FileOutputStream("src/xml/dom/jaxp/testBook.xml"))); System.out.println("over"); } }
运行后:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架> <书 id="b1"> <书名>Book1</书名> <作者>auther1</作者> <售价>50元</售价> </书> <书 id="b2"> <书名>Book2</书名> <作者>auther2</作者> <售价>价格2</售价> </书> </书架>
读取节点:遍历节点
public class Demo1 { public static void main(String[] args) throws Exception { // 获得工厂类 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 获得解析对象 DocumentBuilder db = dbf.newDocumentBuilder(); // 解析目标文件 Document doc = db.parse("src/xml/dom/jaxp/testBook.xml"); // 获得目标文件的根节点 Element root = doc.getDocumentElement(); // 获取指定的节点 System.out.println("-----得到书名-----"); NodeList nodes = doc.getElementsByTagName("书名"); for(int i = 0; i < nodes.getLength(); i++){ Node node = nodes.item(i); System.out.println("第"+(i+1)+"本书的书名是:"+node.getTextContent()); } // 遍历节点名 System.out.println("-----遍历节点-----"); list(root); // 获得指定属性值 System.out.println("-----获得指定属性值-----"); String attr = ((Element)doc.getElementsByTagName("书").item(0)).getAttribute("id"); System.out.println("第一本书的id为:"+attr); } }
运行结果:
相关文章推荐
- javaweb-day02-2(XML 解析 - Jaxp的sax方式解析)
- XML之JAXP解析
- xml解析-jaxp-sax方式
- JAXP解析XML(基于DOM模型)
- XML系列:(5)XML解析-JAXP的DOM解析方式修改XML
- 20110529-Day01 Xml的解析,jaxp
- jaxp 解析xml 小demo 对xml文件标签实现增删改查crud操作
- 使用JAXP对XML文档进行DOM解析
- javawebXML及Jaxp解析XML
- [学习笔记]XML解析之JAXP
- 【XML】DOM—JAXP 解析
- XML解析技术和使用Jaxp对xml文档进行dom解析
- jaxp解析XML之DOM解析
- jaxp解析xml文档实现增删改查
- jaxp的sax方式解析xml
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- Sun公司的jaxp解析中的DOM解析与生成XML
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- javaweb学习总结十一(JAXP对XML文档进行DOM解析)
- jaxp对xml解析