XML入门学习笔记之XML解析技术---DOM解析
来源:互联网 发布:周克华事件真相知乎 编辑:程序博客网 时间:2024/05/11 17:06
一.DOM解析
1.解析标准有w3c制定。
特点:
(1)dom会把xml文件看做一棵dom树并全部加在到内存。
(2)适合做crud操作。
(3)dom不太适合去操作比较大的xml文件(由于dom解析是将xml文件全部加在到内存中,而jvm在启动的时候默认最大内存64M,如果文件较大则内存溢出。解决办法:如果是myeclipse,可以右键工程-properties-Run/Debug Settings-Arguments-VM arguments 填写参数-Xmx?(?的值自定义。比如-Xmx200m则表示分配200m内存给jvm))
2.xml解析api jaxp快速入门
首先写好一个文件class.xml
<span style="font-size:18px;color:#330000;"><?xml version="1.0" encoding="utf-8"?><root> <stu num="st001"> <name>小丽</name> <sex>女</sex> <intro>这是一个好学生</intro> </stu> <stu num="sp004"> <name>小红</name> <sex>女</sex> <intro>这是一个好学生</intro> </stu> <stu num="sp005"> <name>黄晓明</name> <sex>男</sex> <intro>这不是一个好学生</intro> </stu></root></span>
接下来就是java代码了:
<span style="font-size:18px;"><span style="white-space:pre"></span>// 首先创建一个DocumentBuilderFactory对象DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();// 通过DocumentBuilderFactory对象得到一个DocumentBuilder对象DocumentBuilder builder = dbf.newDocumentBuilder();// 指定解析哪个xml文件// 解析返回一个document节点/Document接口Document doc = builder.parse("src/class.xml");</span>已经得到文档,接下来遍历这个文档:
</pre><pre name="code" class="java">// Node接口,底下有很多子接口,包括Documentpublic static void listNode(Node node) {// 只显示标签元素不显示空格元素if (node.getNodeType() == Node.ELEMENT_NODE) {System.out.println(node.getNodeName());}// 递归取出node的子节点NodeList childNodes = node.getChildNodes();for (int i = 0; i < childNodes.getLength(); i++) {listNode(childNodes.item(i));}}
<pre class="java" name="code">// 具体的遍历某个学生的信息public static void read(Document doc) {// doc.getElementById(elementId),如果指定该标签有id属性的话可以使用NodeList elementsByTagName = doc.getElementsByTagName("stu");for (int i = 0; i < elementsByTagName.getLength(); i++) {System.out.println(elementsByTagName.item(i));}// 取出第一个学生的信息Node stu = elementsByTagName.item(0);Element ele = (Element) stu;System.out.println("学号是 " + ele.getAttribute("num"));// 取出stu的属性,学号Element sex = (Element) (ele.getElementsByTagName("sex").item(0));// 取出介绍Element intro = (Element) ele.getElementsByTagName("intro").item(0);System.out.println(sex.getTextContent() + "介绍 "+ intro.getTextContent());}
<pre class="java" name="code">// 添加节点public static void addInfo(Document doc) throws TransformerException {// 首先创建一个新的学生节点Element stu = doc.createElement("stu");// 添加属性stu.setAttribute("stu", "sp004");// 创建name标签Element name = doc.createElement("name");name.setTextContent("小红");Element sex = doc.createElement("sex");sex.setTextContent("女");Element intro = doc.createElement("intro");intro.setTextContent("这是一个好学生");// 添加标签stu.appendChild(name);stu.appendChild(sex);stu.appendChild(intro);// 将stu添加到根节点doc.getDocumentElement().appendChild(stu);// 以上操作只是在内存中的xml树中添加了信息,并未保存到文件中// 还需要转换工厂实现保存到xml文件TransformerFactory tff = TransformerFactory.newInstance();// 得到一个转换器Transformer tf = tff.newTransformer();tf.transform(new DOMSource(doc), new StreamResult("src/class.xml"));}
删除节点和属性:
Element item = (Element) doc.getElementsByTagName("stu").item(0);//删除节点item.getParentNode().removeChild(item);// 删除属性item.removeAttribute("num");
//以上操作之后还是仅仅是在内存中操作的,并未写入文件。还需要转换器更新xml文件
0 0
- XML入门学习笔记之XML解析技术---DOM解析
- XML解析之DOM解析技术案例
- XML学习之DOM解析
- dom解析xml技术
- 解析xml之--DOM
- xml解析之Dom
- XML解析之 DOM
- XML解析之Dom
- XML解析之DOM
- XML解析之Dom
- XML解析之DOM
- 解析XML之DOM
- xml之dom解析
- xml解析之dom
- XML之DOM解析
- xml解析之DOM
- XML解析之dom
- XML解析之DOM
- HDU ACM 1050 贪心
- 原来C++之父在大摩工作呀,而且还是总经理。。
- IOS开发第三方工具整合与比较
- 第四章 4.1.2节练习 & 4.1.3节练习
- this 构造器中调用构造器
- XML入门学习笔记之XML解析技术---DOM解析
- 我的求职简历(屡试不爽,打造简历也是产品经理的一修养)网页显示不太好
- QueryServiceLockStatus
- 杭电 1207
- 实验二: 线性表实验 第一部分 顺序表
- Automated SQL Injection Detection
- 《黄金时代》与《萧红评传》
- fragment嵌套fragment,切换后,子fragment内容不显示的问题
- List list = new ArrayList();和ArrayList list=new ArrayList();的区别