解析XML通过JAXP的DOM(DEMO)

废话不多说,自行测试跟看1.6以上的JDK API
目录结构:

XML文件内容:

XML代码:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架><书 批发价="30"><书名>java编程思想</书名><作者>James</作者><价格>89</价格></书><书><书名>C Primer</书名><作者>JJ</作者><价格>30</价格></书>
</书架>

代码块:

package com.csa.dom;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.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;public class Main {public static void main(String[] args) throws Exception {//从Document工厂生产一个BurilderDocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();//通过parse()方法获取一个对象Document document = documentBuilder.parse("src/Book.xml");//getContentByNameAndIndex(document, "书名", 2);//printByNode(document, -1);//setContentByNodeAndIndex(document, "价格", 2, "30");//insertNewToNodeBefore(document, "书名", 1, createNode(document, "批发价", "20"), false);//appendChildToParent(document, "书", 1, createNode(document, "批发价", "20"));//removeNodeByName(document, "批发价", 1);//opElementByDom(document, "书", 1, "id", "1");}/*** 获得某个具体的节点内容,通过标签名字跟位置* @param dom Document对象* @param name 查找的标签名字* @param index 第几个标签*/private static void getContentByNameAndIndex(Document dom, String name, int index){Node item = dom.getElementsByTagName(name).item(index-1);System.out.println(item.getTextContent());}/*** 遍历所有节点* @param node 要遍历的节点* @param hi 深度*/private static void printByNode(Node node, int hi){if(node.getNodeType()==Node.ELEMENT_NODE){for(int i=0;i<hi;i++){System.out.printf("\t");}System.out.println(node.getNodeName());}NodeList childNodes = node.getChildNodes();for(int i=0;i<childNodes.getLength();i++){printByNode(childNodes.item(i), hi+1);}}/*** 修改某个元素节点内容* @param dom document对象* @param name 标签名字* @param index 位置* @param replace 替换内容*/private static void setContentByNodeAndIndex(Document dom, String name, int index, String replace) throws Exception{dom.getElementsByTagName(name).item(index-1).setTextContent(replace);//获取transform对象Transformer transformer = TransformerFactory.newInstance().newTransformer();//将更改过的dom写到原来的xml里面transformer.transform(new DOMSource(dom), new StreamResult(dom.getBaseURI()));}/*** 创建一个节点* @param dom document对象* @param nodename 节点名字* @param content 节点内容* @return 一个节点对象*/private static Node createNode(Document dom, String nodename, String content){Node node = dom.createElement(nodename);node.setTextContent(content);return node;}/*** 向指定元素节点中添加子元素节点* @param dom document对象* @param parent 父节点名字* @param index 第几个父节点* @param newnode 孩子节点*/private static void appendChildToParent(Document dom, String parent, int index, Node newnode) throws Exception{Node item = dom.getElementsByTagName(parent).item(index-1);item.appendChild(newnode);Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.transform(new DOMSource(dom), new StreamResult(dom.getBaseURI()));}/*** 向指定元素节点上增加同级元素节点* @param dom document对象* @param nodename 节点名字* @param index 位置* @param newnode 兄弟节点* @param isbefore 插入在节点之前则true*/private static void insertNewToNodeBefore(Document dom, String nodename, int index, Node newnode, boolean isbefore) throws Exception{Node item = dom.getElementsByTagName(nodename).item(index-1);if(isbefore)item.getParentNode().insertBefore(newnode, item);elseitem.getParentNode().insertBefore(newnode, item.getNextSibling());Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.transform(new DOMSource(dom), new StreamResult(dom.getBaseURI()));}/*** 删除指定元素节点* @param dom document对象* @param name 删除的节点名字* @param index 位置*/private static void removeNodeByName(Document dom, String name, int index) throws Exception{Node item = dom.getElementsByTagName(name).item(index-1);item.getParentNode().removeChild(item);Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.transform(new DOMSource(dom), new StreamResult(dom.getBaseURI()));}/*** 操作XML文件属性* @param dom document对象* @param tagname 标签名字* @param index 位置* @param key 属性* @param value 属性值*/private static void opElementByDom(Document dom, String tagname, int index, String key, String value) throws Exception{Node item = dom.getElementsByTagName(tagname).item(index-1);Element elem = (Element)item;elem.setAttribute(key, value);Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.transform(new DOMSource(dom), new StreamResult(dom.getBaseURI()));}
}

XML解析---JAVAEE学习之路相关推荐

  1. javaee学习之路(十五)JSP编程总结

    1.1 Tip:如何查找JSP页面中的错误   JSP页面中的JSP语法格式有问题,导致其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息.   ...

  2. IOS学习:常用第三方库(GDataXMLNode:xml解析库)

    IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...

  3. Android开发学习之Xml解析归纳

    在程序开发中,有两种语言是和平台无关的,它们就是Xml和Json,因此,作为在不同平台间传递信息的Xml和Json在Android中同样扮演者重要的角色,那么今天我们就来一起学习Android中Xml ...

  4. OC学习第十二节 XML解析

    ============== day12 xml解析 ============== xml是可扩展性标记语言Extensible Markup Language. 类似于HTML,是从HTML衍生出来 ...

  5. Kubernetes学习之路(一)之概念和架构解析和证书创建和分发

    1.Kubernetes的重要概念 转自:CloudMan老师公众号<每天5分钟玩转Kubernetes>https://item.jd.com/26225745440.html Clus ...

  6. Jav新人之路 -- XML解析

    XML解析 1.xml ####1.1 什么是xml文件 以标签的形式存储的文件,后缀为xml 常用语法 <beans><bean id="类名" class=& ...

  7. JavaWeb学习之路——SSM框架之Spring(五)

    前情提要请看JavaWeb学习之路--SSM框架之Spring(四)                                         整合Spring和Mybatis框架 1.在项目的 ...

  8. java学习之路目录(已完结)

    java学习之路目录(持续更新中-) 第一阶段 javaSE(完结) 序号 标题 内容 001 java初识 java语言特点.体系结构.运行机制 002 java SE基础语法 注释.关键字.变量. ...

  9. 【java学习之路】(javaWeb【后端】篇)001.XMLTomcatHttp协议

    第一章 XML 1. 学习目标 了解配置文件的作用 了解常见的配置文件类型 掌握properties文件的编写规范 掌握xml文件的编写 了解xml文件的约束 掌握xml文件的解析 2. 内容讲解 2 ...

最新文章

  1. cmd做个定时弹窗_揭秘200元山寨苹果耳机!一颗耳边的“定时炸弹”...
  2. Python 技术篇-pip安装提示:‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件,问题解决方法
  3. python用numpy和pil处理图像成灰度图_「火炉炼AI」机器学习047-图像的直方图均衡化操作...
  4. PHP JSON 操作总结
  5. junit 引入spring 注解管理_第05章 Spring 整合 Junit
  6. CVPR 2019 | APDrawingGAN:人脸秒变艺术肖像画
  7. Check failed: weights_.Size() == num_row_ (38997 vs. 383852) : Size of weights must equal to number.
  8. C++ exit 与 return 浅析
  9. this表示当前对象简单实例
  10. error_reporting()的用法
  11. Status Code:200 OK (from disk cache)和304的区别,以及怎么禁止缓存
  12. XMLHTTPRequest的属性和方法简介
  13. 【十八】文件译文:graph.js.fmkr (测试报告模版配置文件)
  14. 网管学习日记-MPLS-LDP协议配置
  15. php中的ul怎么居中,让 UL 与 LI 左对齐
  16. 【软技能】完全写作指南--个人博客
  17. 【华为云学院】OpenStack原理及在华为云中的应用---知识总结
  18. Linux 虚拟网卡技术:Macvlan
  19. IDEA类文件图标变成“J”
  20. HTTP性能极限优化

热门文章

  1. kubelet创建容器的步骤
  2. cron和crontab
  3. java1.8 lambda进行并行运算
  4. 2017 五月 UFED Series Releases 系列 6.2更新发布
  5. PAT (Basic Level) Practise 1040 有几个PAT(DP)
  6. asp.net 调用带证书的webservice解决办法
  7. 003.XE3包含了TPerlRegEx的单元
  8. Squid 代理服务器 编译源码 伪造HTTP_X_FORWARDED_FOR 请求头
  9. AttributeError:module tensorflow no attribute app解决办法
  10. 深度学习问题解决:Check failed: stream-parent()-GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogra