DOM解析XML
来源:互联网 发布:通用led显示屏软件 编辑:程序博客网 时间:2024/06/10 02:39
DOM解析xml时在内存中生成DOM文档树,可以随机访问/增加/修改/删除其中的节点,十分方便,缺点是xml十分庞大时,解析会消耗较多内存
Node对象代表着DOM的基本类型,代表文档树中的一个节点(包括空格回车等),Element(元素),Attr(属性),Text(文本),Document(文档)都继承于Node
1.解析xml文档:
books.xml
<?xml version="1.0" encoding="UTF-8"?><books> <book no="01"> <name>JAVA编程思想</name> <price>100</price> </book> <book no="02"> <name>EFFECTIVE JAVA</name> <price>100</price> </book></books>
先使用解析器生成Document对象:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();//得到document对象Document document = builder.parse(new File("D:/books.xml"));
解析过程:
static void readXml (Document document){//得到文档的根元素Element rootNode = document.getDocumentElement();//或者//Node rootNode = document.getElementsByTagName("books").item(0);//遍历books元素内的子元素NodeList bookList = rootNode.getChildNodes();//或者//NodeList bookList = document.getElementsByTagName("book");for (int i = 0; i < bookList.getLength(); i++) {Node bookNode = bookList.item(i);//去空格if (bookNode instanceof Element) {print("--------");print("元素:");print(bookNode.getNodeName());print("属性:");//获得属性print(((Element) bookNode).getAttribute("no"));//获得book节点下的所有元素for (int j = 0; j < bookNode.getChildNodes().getLength(); j++) {Node node = bookNode.getChildNodes().item(j);if (node instanceof Element) {print(bookNode.getNodeName()+"的子元素:");print(node.getNodeName());print(bookNode.getNodeName() +"的子元素值:");print(node.getTextContent());}}//作用和上面循环相同//Node child = bookNode.getFirstChild();//while (child != null) {//if (child instanceof Element) {//print(bookNode.getNodeName()+"的子元素:");//print(child.getNodeName());//print(bookNode.getNodeName() +"的子元素值:");//print(child.getTextContent());//}//child = child.getNextSibling();//}}}}public static void print(Object obj) {System.out.println(obj.toString());}
结果:
--------
元素:
book
属性:
01
book的子元素:
name
book的子元素值:
JAVA编程思想
book的子元素:
price
book的子元素值:
100
--------
元素:
book
属性:
02
book的子元素:
name
book的子元素值:
EFFECTIVE JAVA
book的子元素:
price
book的子元素值:
100
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.newDocument();//------------添加节点------------Element books = document.createElement("books");document.appendChild(books);//属性Attr attr = document.createAttribute("no");attr.setValue("03");books.setAttributeNode(attr);Element book = document.createElement("book");books.appendChild(book);Element name = document.createElement("name");Element price = document.createElement("price");//文本值Text nameText = document.createTextNode("Servlet");Text priceText = document.createTextNode("200");name.appendChild(nameText);price.appendChild(priceText);book.appendChild(name);book.appendChild(price);//利用生成的dom创建dom输入源DOMSource source = new DOMSource(document);//保存转换后结果到books.xml文件中StreamResult result = new StreamResult(new File("books.xml"));//转换工厂类TransformerFactory tff = TransformerFactory.newInstance();Transformer tf = tff.newTransformer();tf.transform(source, result);
结果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><books no="03"><book><name>Servlet</name><price>200</price></book></books>
- XML DOM---解析xml dom
- 【XML】DOM解析XML
- 解析xml dom 解析
- xml解析 Dom解析
- dom解析xml
- dom解析 xml
- dom解析xml
- 解析xml之--DOM
- Dom解析XML文档
- DOM解析XML文件
- dom解析xml
- dom解析xml
- xml文件解析-DOM
- JAVA解析XML DOM
- DOM解析XML
- JAVA解析XML DOM
- XML DOM解析
- JAVA解析XML DOM
- uva 1456 - Cellular Network (贪心+概率+dp)
- LINUX+PHP实现网页快照(截屏)
- poj 2182
- 根据XML文件批量生成java类——freemarker
- PHP中使用AMQP消息队列|LNMP
- DOM解析XML
- Linux设备模型 (2)
- HTTP状态码
- 关于线程知识的总结
- 详解UML中的聚合,关联,泛化等关系
- C#面向过程语言
- Dokan 入门 基础
- 决策树(一) ID3
- 关于电脑开机密码忘记的解决方法