XML解析---JAVAEE学习之路
解析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学习之路相关推荐
- javaee学习之路(十五)JSP编程总结
1.1 Tip:如何查找JSP页面中的错误 JSP页面中的JSP语法格式有问题,导致其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息. ...
- IOS学习:常用第三方库(GDataXMLNode:xml解析库)
IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...
- Android开发学习之Xml解析归纳
在程序开发中,有两种语言是和平台无关的,它们就是Xml和Json,因此,作为在不同平台间传递信息的Xml和Json在Android中同样扮演者重要的角色,那么今天我们就来一起学习Android中Xml ...
- OC学习第十二节 XML解析
============== day12 xml解析 ============== xml是可扩展性标记语言Extensible Markup Language. 类似于HTML,是从HTML衍生出来 ...
- Kubernetes学习之路(一)之概念和架构解析和证书创建和分发
1.Kubernetes的重要概念 转自:CloudMan老师公众号<每天5分钟玩转Kubernetes>https://item.jd.com/26225745440.html Clus ...
- Jav新人之路 -- XML解析
XML解析 1.xml ####1.1 什么是xml文件 以标签的形式存储的文件,后缀为xml 常用语法 <beans><bean id="类名" class=& ...
- JavaWeb学习之路——SSM框架之Spring(五)
前情提要请看JavaWeb学习之路--SSM框架之Spring(四) 整合Spring和Mybatis框架 1.在项目的 ...
- java学习之路目录(已完结)
java学习之路目录(持续更新中-) 第一阶段 javaSE(完结) 序号 标题 内容 001 java初识 java语言特点.体系结构.运行机制 002 java SE基础语法 注释.关键字.变量. ...
- 【java学习之路】(javaWeb【后端】篇)001.XMLTomcatHttp协议
第一章 XML 1. 学习目标 了解配置文件的作用 了解常见的配置文件类型 掌握properties文件的编写规范 掌握xml文件的编写 了解xml文件的约束 掌握xml文件的解析 2. 内容讲解 2 ...
最新文章
- cmd做个定时弹窗_揭秘200元山寨苹果耳机!一颗耳边的“定时炸弹”...
- Python 技术篇-pip安装提示:‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件,问题解决方法
- python用numpy和pil处理图像成灰度图_「火炉炼AI」机器学习047-图像的直方图均衡化操作...
- PHP JSON 操作总结
- junit 引入spring 注解管理_第05章 Spring 整合 Junit
- CVPR 2019 | APDrawingGAN:人脸秒变艺术肖像画
- Check failed: weights_.Size() == num_row_ (38997 vs. 383852) : Size of weights must equal to number.
- C++ exit 与 return 浅析
- this表示当前对象简单实例
- error_reporting()的用法
- Status Code:200 OK (from disk cache)和304的区别,以及怎么禁止缓存
- XMLHTTPRequest的属性和方法简介
- 【十八】文件译文:graph.js.fmkr (测试报告模版配置文件)
- 网管学习日记-MPLS-LDP协议配置
- php中的ul怎么居中,让 UL 与 LI 左对齐
- 【软技能】完全写作指南--个人博客
- 【华为云学院】OpenStack原理及在华为云中的应用---知识总结
- Linux 虚拟网卡技术:Macvlan
- IDEA类文件图标变成“J”
- HTTP性能极限优化
热门文章
- kubelet创建容器的步骤
- cron和crontab
- java1.8 lambda进行并行运算
- 2017 五月 UFED Series Releases 系列 6.2更新发布
- PAT (Basic Level) Practise 1040 有几个PAT(DP)
- asp.net 调用带证书的webservice解决办法
- 003.XE3包含了TPerlRegEx的单元
- Squid 代理服务器 编译源码 伪造HTTP_X_FORWARDED_FOR 请求头
- AttributeError:module tensorflow no attribute app解决办法
- 深度学习问题解决:Check failed: stream-parent()-GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogra