java DOM 操作xml

1 代码如下:

  1 package dom.pasing;
  2
  3 import java.io.IOException;
  4 import java.io.StringWriter;
  5
  6 import javax.xml.parsers.DocumentBuilder;
  7 import javax.xml.parsers.DocumentBuilderFactory;
  8 import javax.xml.parsers.ParserConfigurationException;
  9
 10
 11 import javax.xml.transform.OutputKeys;
 12 import javax.xml.transform.Transformer;
 13 import javax.xml.transform.TransformerException;
 14 import javax.xml.transform.TransformerFactory;
 15 import javax.xml.transform.dom.DOMSource;
 16 import javax.xml.transform.stream.StreamResult;
 17
 18 import org.apache.xml.serialize.OutputFormat;
 19 import org.apache.xml.serialize.XMLSerializer;
 20 import org.w3c.dom.Attr;
 21 import org.w3c.dom.Document;
 22 import org.w3c.dom.Element;
 23 import org.w3c.dom.Node;
 24 import org.w3c.dom.NodeList;
 25 import org.w3c.dom.Text;
 26
 27 public class DOMTest {
 28
 29     /**
 30      *
 31      * @return
 32      */
 33     public static Document createDocument()  {
 34
 35         Document document = null;
 36
 37         try {
 38             DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
 39             DocumentBuilder builder = builderFactory.newDocumentBuilder();
 40             document = builder.newDocument();
 41             Element root = document.createElement("students");
 42             document.appendChild(root);
 43
 44             /**
 45              *     <students>
 46              *         <student sn="01">
 47              *             <name>张三</name>
 48              *             <age>19</age>
 49              *         </student>
 50              *     </students>
 51              */
 52             Element stuEle = document.createElement("student");
 53
 54             Attr attr = document.createAttribute("sn");
 55             attr.setValue("01");
 56             stuEle.setAttributeNode(attr);
 57
 58             Element nameElem = document.createElement("name");
 59             Text txtName = document.createTextNode("张三");
 60             nameElem.appendChild(txtName);
 61             stuEle.appendChild(nameElem);
 62
 63             Element ageElem = document.createElement("age");
 64             Text txtAge = document.createTextNode("19");
 65             ageElem.appendChild(txtAge);
 66             stuEle.appendChild(ageElem);
 67             document.getDocumentElement().appendChild(stuEle); //在文档根元素节点studnets下,添加一个student元素节点
 68
 69             /**
 70              * 创建节点
 71              *     <student>
 72              *         <name>李四</name>
 73              *         <age>24</age>
 74              *     </student>
 75              */
 76             Element stuEle2 = document.createElement("student");
 77
 78             Attr attr2 = document.createAttribute("sn");
 79             attr2.setValue("02");
 80             stuEle2.setAttributeNode(attr2);
 81
 82             Element nameEle2 = document.createElement("name");
 83             Text txtName2 = document.createTextNode("李四");
 84             nameEle2.appendChild(txtName2);
 85             stuEle2.appendChild(nameEle2);
 86
 87             Element ageEle2 = document.createElement("age");
 88             Text txtAge2 = document.createTextNode("24");
 89             ageEle2.appendChild(txtAge2);
 90             stuEle2.appendChild(ageEle2);
 91             document.getDocumentElement().appendChild(stuEle2); //在文档根元素节点studnets下,添加一个student元素节点
 92         } catch (ParserConfigurationException e) {
 93             e.printStackTrace();
 94         }
 95
 96         return document;
 97     }
 98
 99     public static void alterDocument(Document document) {
100         NodeList nodeList = document.getElementsByTagName("student");
101         Node node = nodeList.item(0);
102         node.getParentNode().removeChild(node); //移除第1个student元素节点
103     }
104
105
106
107     /**
108      *  转换DOM为String
109      * @param document
110      * @return
111      * @throws TransformerException
112      */
113     public static String documentToStr(Document document) {
114
115         String result = null;
116
117         try {
118             DOMSource source = new DOMSource(document);
119             StringWriter stringWriter = new StringWriter();
120             StreamResult streamResult = new StreamResult(stringWriter);
121
122             TransformerFactory transformerFactory = TransformerFactory.newInstance();
123             Transformer transformer = transformerFactory.newTransformer();
124             transformer.setOutputProperty(OutputKeys.INDENT, "yes");     //默认的缩进量长度为0
125             transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
126             transformer.transform(source, streamResult);
127
128             result = stringWriter.toString();
129         } catch (TransformerException e) {
130             e.printStackTrace();
131         }
132         return result;
133     }
134
135     /**
136      *
137      * @param document
138      * @return
139      */
140     public static String documentToIndentStr(Document document) {
141
142         String result = null;
143
144         try {
145
146             StringWriter stringWriter = new StringWriter();
147
148             OutputFormat format = new OutputFormat(document);
149             format.setLineWidth(100);
150             format.setIndenting(true);
151             format.setIndent(4);
152
153             XMLSerializer serializer = new XMLSerializer(stringWriter, format);
154             serializer.serialize(document);
155
156             result = stringWriter.toString();
157         } catch (IOException e) {
158             // TODO Auto-generated catch block
159             e.printStackTrace();
160         }
161         return result;
162     }
163
164     public static void main(String[] args) {
165
166         String rslt = null;
167
168         Document document = createDocument();
169
170         rslt = documentToIndentStr(document);
171
172         System.out.println(rslt);
173     }
174 }

输出结果:

<?xml version="1.0" encoding="UTF-8"?>
<students>
  <student sn="01">
    <name>张三</name>
    <age>19</age>
  </student>
  <student sn="02">
    <name>李四</name>
    <age>24</age>
  </student>
</students>

时间: 2024-08-08 09:25:11

java DOM 操作xml的相关文章

org.w3c.dom(java dom)解析XML文档

位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 2.解析器:DocumentBuilder 创建方法:通过解析器工厂类来获得 DocumentBu

java DOM解析xml文件出现#text节点解决方案

java DOM解析xml文件出现#text节点解决方案 原生java解析xml的方法提供了两个,DocumentBuilder 和 SAXParser. 试了第一个DOM方法,在解析输出节点过程中,getNodeName()输出节点名发现多出了几个#text节点. text.xml <?xml version="1.0" encoding="UTF-8"?> <!-- xml解析测试文件 --> <LData> <ldat

Java Stax操作XML简介

使用stax操作xml 非常的简单,它的读取过程像是一个光标在移动.针对不同的节点做不同的处理. 先看一个基于光标的模型处理xml: public class StaxTest { @Test public void test1() { try { // 1.构建XMLStreamReader XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory .createXMLSt

DOM操作XML实例

DTD如下: <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT 书籍列表 (计算机书籍)* > <!ELEMENT 计算机书籍 ((书名,价格)+,作者+,简介,tel,hr)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 价格 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT

摘抄的 JAVA JDOM 操作XML文件

JDOM修炼篇 用过XERCES的程序员都会感到,有时候用一句话就可以说清楚的事,当用XERCES的API来实现时,要三四行程序. 回页首 获得并安装JDOM 在 http://www.jdom.org/可以下载JDOM的最新版本,将压缩包中的jdom.jar及lib目录下的全部jar包加入到classpath就可以了. 回页首 用JDOM解析XML JDOM模型的全部类都在org.jdom.*这个包里,org.jdom.input.*这个包里包含了JDOM的解析器,其中的DOMBuilder的

PHP通过DOM操作XML

PHP XML操作类DOMDocument属性及方法注意大小写一定不能弄错.属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataType 返回此节点的数据类型 Definition 以DTD或XML模式给出的节点的定义(只读) Doctype 指定文档类型节点(只读) documentElement 返回文档的根元素(可读写) firstChild 返回当前节点的第一个子节点(只读) Implementation 返回XMLDOM

Java Dom解析xml

Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,下面结合这个xml文件来进行dom解析. Xml代码 <?xml version="1.0" encoding="UTF-8"?> <books> <book id="12"> <name>thinking in java</name> <price>85.5</pri

Java文件操作①——XML文件的读取

一.邂逅XML 文件种类是丰富多彩的,XML作为众多文件类型的一种,经常被用于数据存储和传输.所以XML在现今应用程序中是非常流行的.本文主要讲Java解析和生成XML.用于不同平台.不同设备间的数据共享通信. XML文件的表现:以“.xml”为文件扩展名的文件: 存储结构:树形结构: 节点名称区分大小写. 1.<book id="1"></book> id为属性, <book><id>1</id></book>

java Dom 解析 XML 详细解答

Dom4j遍历解析XML测试 近来老和XML打交道,不深挖不行了.. 这是一个Dom4j解析XML的例子,为做复杂递归处理前期所写的例子.涵盖了XML的解析方面大部分核心API. 环境: Dom4j-1.6.1 Dom4j解析需要XML需要的最小类库为: dom4j-1.6.1.jar jaxen-1.1-beta-6.jar 目标: 解析一个xml,输出所有的属性和元素值. 测试代码: XML文件: <?xml version="1.0" encoding="GBK&