`
luck332
  • 浏览: 86380 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java与XML文件的读写

    博客分类:
  • java
阅读更多
DOM Document Object Model 的缩写,即文档对象模型。前面说过, XML 将数据组织为一颗树,所以 DOM 就是对这颗树的一个对象描叙。通俗的说,就是通过解析 XML 文档,为 XML 文档在逻辑上建立一个树模型,树的节点是一个个对象。我们通过存取这些对象就能够存取 XML 文档的内容。
下面我们来看一个简单的例子,看看在 DOM 中,我们是如何来操作一个 XML 文档的。
这是一个 XML 文档,也是我们要操作的对象:
下面,我们需要把这个文档的内容解析到一个个的 Java 对象中去供程序使用,利用 JAXP ,我们只需几行代码就能做到这一点。首先,我们需要建立一个解析器工厂,以利用这个工厂来获得一个具体的解析器对象:
我们在这里使用 DocumentBuilderFacotry 的目的是为了创建与具体解析器无关的程序,当 DocumentBuilderFactory 类的静态方法 newInstance() 被调用时,它根据一个系统变量来决定具体
使用哪一个解析器。又因为所有的解析器都服从于 JAXP 所定义的接口,所以无论具体使用哪一个解析器,代码都是一样的。所以当在不同的解析器之间进行切换时,只需要更改系统变量的值,而不用更改任何代码。这就是工厂所带来的好处。这个工厂模式的具体实现,可以参看下面的类图。当获得一个工厂对象后, 使用它的静态方法 newDocumentBuilder() 方法可以获得一个 DocumentBuilder 对象,这个对象代表了具体的 DOM 解析器。
DOM 详解
DOM 的基本对象有 5 个: Document Node NodeList Element Attr 。下面就这些对象的功
能和实现的方法作一个大致的介绍。
Document
对象代表了整个 XML 的文档,所有其它的 Node ,都以一定的顺序包含在 Document
String message = my_node.getFirstChild().getNodeValue();
1
.基本的 DOM 对象
对象之内,排列成一个树形的结构,程序员可以通过遍历这颗树来得到 XML 文档的所有的内容,这也是对 XML 文档操作的起点。我们总是先通过解析 XML 源文件而得到一个 Document 对象,然后再来执行后续的操作。此外, Document 还包含了创建其它节点的方法,比如 createAttribut() 用来创建一个 Attr 对象。它所包含的主要的方法有:
createAttribute(String) :用给定的属性名创建一个 Attr 对象,并可在其后使用 setAttributeNode 方法来放置在某一个 Element 对象上面。
createElement(String)
:用给定的标签名创建一个 Element 对象,代表 XML 文档中的一个标签,然后就可以在这个 Element 对象上添加属性或进行其它的操作。
createTextNode(String)
:用给定的字符串创建一个 Text 对象, Text 对象代表了标签或者属性中所包含的纯文本字符串。如果在一个标签内没有其它的标签,那么标签内的文本所代表的 Text 对象是这个 Element 对象的唯一子对象。
getElementsByTagName(String)
:返回一个 NodeList 对象,它包含了所有给定标签名字的标签。 getDocumentElement() :返回一个代表这个 DOM 树的根节点的 Element 对象,也就是代表 XML 文档根元素的那个对象。
Node
对象是 DOM 结构中最为基本的对象,代表了文档树中的一个抽象的节点。在实际使用的时候,很少会真正的用到 Node 这个对象,而是用到诸如 Element Attr Text Node 对象的子对象来操作文档。 Node 对象为这些对象提供了一个抽象的、公共的根。虽然在 Node 对象中定义了对其子节点进行存取的方法,但是有一些 Node 子对象,比如 Text 对象,它并不存在子节点,这一点是要注意的。 Node 对象所包含的主要的方法有: appendChild(org.w3c.dom.Node) :为这个节点添加一个子节点,并放在所有子节点的最后,如果这个子节点已经存在,则先把它删掉再添加进去。 getFirstChild() :如果节点存在子节点,则返回第一个子节点,对等的,还有 getLastChild() 方法返回最后一个子节点。
getNextSibling()
返回在 DOM 树中这个节点的下一个兄弟节点, 对等的, 还有
getPreviousSibling()
方法返回其前一个兄弟节点。
getNodeName()
:根据节点的类型返回节点的名称。
getNodeType()
:返回节点的类型。
getNodeValue()
:返回节点的值。
hasChildNodes()
:判断是不是存在有子节点。
hasAttributes()
:判断这个节点是否存在有属性。
getOwnerDocument()
:返回节点所处的 Document 对象。
insertBefore(org.w3c.dom.Node new
org.w3c.dom.Node ref) :在给定的一个子对象前再插入一个子对象。
removeChild(org.w3c.dom.Node)
:删除给定的子节点对象。
replaceChild(org.w3c.dom.Node new
org.w3c.dom.Node old) :用一个新的 Node 对象代替给定的子节点对象。
NodeList
对象,顾名思义,就是代表了一个包含了一个或者多个 Node 的列表。可以简单的把它看成一个 Node 的数组,我们可以通过方法来获得列表中的元素:
GetLength() :返回列表的长度。
Item(int)
:返回指定位置的 Node 对象。
Element
对象代表的是 XML 文档中的标签元素,继承于 Node ,亦是 Node 的最主要的子对象。在标签中可以包含有属性,因而 Element 对象中有存取其属性的方法,而任何 Node 中定义的方法,也可以用在 Element 对象上面。
getElementsByTagName(String)
:返回一个 NodeList 对象,它包含了在这个标签中其下的子孙
节点中具有给定标签名字的标签。
getTagName()
:返回一个代表这个标签名字的字符串。
getAttribute(String)
:返回标签中给定属性名称的属性的值。在这儿需要主要的是,应为 XML
文档中允许有实体属性出现,而这个方法对这些实体属性并不适用。这时候需要用到
getAttributeNodes()
方法来得到一个 Attr 对象来进行进一步的操作。
getAttributeNode(String)
:返回一个代表给定属性名称的 Attr 对象。
Attr
对象代表了某个标签中的属性。 Attr 继承于 Node ,但是因为 Attr 实际上是包含在 Element
的,它并不能被看作是 Element 的子对象,因而在 DOM Attr 并不是 DOM 树的一部分,所以 Node
中的 getparentNode() getpreviousSibling() getnextSibling() 返回的都将是 null 。也就是说,
Attr
其实是被看作包含它的 Element 对象的一部分,它并不作为 DOM 树中单独的一个节点出现。
这一点在使用的时候要同其它的 Node 子对象相区别。
需要说明的是,上面所说的 DOM 对象在 DOM 中都是用接口定义的,在定义的时候使用的是与
具体语言无关的 IDL 语言来定义的。因而, DOM 其实可以在任何面向对象的语言中实现,只要
它实现了 DOM 所定义的接口和功能就可以了。同时,有些方法在 DOM 中并没有定义,是用 IDL
的属性来表达的,当被映射到具体的语言时,这些属性被映射为相应的方法。
有了上面的介绍,相信你对DOM理解的更多了吧。下面的例子将让你对DOM更加熟悉起来。
package com.dzf.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Vector;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
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;

/***/ /**
*
@author dengzhifeng
*
*/

public class Writexml ... {
private Documentdocument;

private Stringfilename;

private boolean validating;

public Writexml(Stringname) throws ParserConfigurationException ... {
filename
= name;
DocumentBuilderFactoryfactory
= DocumentBuilderFactory.newInstance();
DocumentBuilderbuilder
= factory.newDocumentBuilder();
document
= builder.newDocument();
}


public VectortoRead(Stringfilename) ... {
Vectortitle
= new Vector();
Vectorcontent
= new Vector();
StringmyStr
= new String();
try ... {
DocumentBuilderFactoryfactory
= DocumentBuilderFactory
.newInstance();
factory.setValidating(validating);
DocumentBuilderbuilder
= factory.newDocumentBuilder();
document
= builder.parse( new File(filename));
document.getDocumentElement().normalize();
Nodenode
= document.getFirstChild();
NodeListlist
= node.getChildNodes();
for ( int i = 0 ;i < list.getLength();i ++ ) ... {
Nodenodeitm
= list.item(i);
if (nodeitm.getNodeName().equals( " Title " )) ... {
myStr
= nodeitm.getFirstChild().getNodeValue();
title.addElement(myStr);
// getFirstChild()
}

if (nodeitm.getNodeName().equals( " Content " )) ... {
myStr
= nodeitm.getFirstChild().getNodeValue();
content.addElement(myStr);
}

}

}
catch (Exceptionexp) ... {
exp.printStackTrace();
return null ;
}

Vectorall
= new Vector();
all.add(title);
all.add(content);
return all;
}


public void toWrite(Stringmytitle,Stringmycontent) ... {
Elementroot
= document.createElement( " D " );
document.appendChild(root);
Elementsegment
= document.createElement( " RH " );
root.appendChild(segment);
ElementH_segment
= document.createElement( " CH " );
H_segment.setAttribute(
" Name " , " FCon_number " );
H_segment.setAttribute(
" Type " , " string " );
H_segment.setAttribute(
" Value " , " 编码 " );
H_segment.setAttribute(
" Visible " , " false " );
H_segment.setAttribute(
" Readonly " , " true " );
segment.appendChild(H_segment);
ElementH_segment1
= document.createElement( " CH " );
H_segment1.setAttribute(
" Name " , " FName " );
H_segment1.setAttribute(
" Type " , " string " );
H_segment1.setAttribute(
" Value " , " 条件名称 " );
H_segment1.setAttribute(
" Visible " , " true " );
H_segment1.setAttribute(
" Readonly " , " true " );
segment.appendChild(H_segment1);
ElementH_segment2
= document.createElement( " CH " );
H_segment2.setAttribute(
" Name " , " FCon_exp " );
H_segment2.setAttribute(
" Type " , " string " );
H_segment2.setAttribute(
" Value " , " 条件 " );
H_segment2.setAttribute(
" Visible " , " true " );
H_segment2.setAttribute(
" Readonly " , " true " );
segment.appendChild(H_segment2);
ElementH_segment3
= document.createElement( " CH " );
H_segment3.setAttribute(
" Name " , " FCon_sum " );
H_segment3.setAttribute(
" Type " , " string " );
H_segment3.setAttribute(
" Value " , " 结论 " );
H_segment3.setAttribute(
" Visible " , " true " );
H_segment3.setAttribute(
" Readonly " , " flase " );
segment.appendChild(H_segment3);
Elementtitle
= document.createElement( " Title " );
title.appendChild(document.createTextNode(mytitle));
root.appendChild(title);
Elementtitle1
= document.createElement( " Title " );
title1.appendChild(document.createTextNode(
" title1 " ));
root.appendChild(title1);
Elementcontent
= document.createElement( " Content " );
content.appendChild(document.createTextNode(mycontent));
content.appendChild(document.createTextNode(
" content1 " ));
root.appendChild(content);
Writexml.save(root);
}


public static void save(Nodedoc) ... {
StringWritermysw
= new StringWriter();
// // System.out.println("doc===="+doc);
if (doc != null ) ... {
try ... {
TransformerFactorytransFact
= TransformerFactory.newInstance();
Transformertrans
= transFact.newTransformer();
doc.normalize();
trans.transform(
new DOMSource(doc), new StreamResult(mysw));
System.out.println(mysw.toString());
}
catch (TransformerConfigurationExceptiontce) ... {
tce.printStackTrace(System.err);
}
catch (TransformerExceptionte) ... {
te.printStackTrace(System.err);
}

}

// return"";
}


分享到:
评论

相关推荐

    java实现Xml文件读写

    本项目“java实现Xml文件读写”提供了一个完整的工程实例,包含了对XML文件进行添加、修改和读取的基本操作。 首先,要实现XML文件的读取,Java提供了`javax.xml.parsers`和`org.w3c.dom`这两个核心包。其中,`...

    java读写xml文件

    ### Java读写XML文件知识点详解 #### 一、概述 在Java编程中,对XML文件进行读取与写入是一项非常常见的任务。XML(可扩展标记语言)是一种用于标记数据的语言,非常适合用来存储和传输数据。Java提供了多种API来...

    Java读写xml java 读写xml文件操作, 简单易懂

    本文将基于提供的文件信息,深入探讨如何利用Java进行XML文件的读取与写入,重点介绍DOM(Document Object Model)方式的操作。 #### DOM解析XML文件 DOM是一种树形结构的数据模型,用于表示XML文档的结构。通过...

    java读写xml文件的方法

    ### Java读写XML文件的方法详解 #### 一、概述 在Java编程中,XML(Extensible Markup Language,可扩展标记语言)是一种广泛使用的数据交换格式。由于其良好的跨平台特性和自描述性,使得XML成为了许多应用程序...

    Java读写xml,word,xml文件(防乱码)

    ### Java读写XML、Word与TXT文件:去除乱码问题详解 #### 一、引言 在实际开发过程中,我们经常需要处理各种类型的文件,包括XML、Word文档以及普通的文本文件(如TXT)。这些文件在读写过程中经常会遇到乱码问题,...

    java中读写XML文件

    在Java编程语言中,XML(eXtensible Markup Language)是一种重要的数据交换格式,用于存储和...在提供的"在java中读写XML文件.ppt"和"源码"中,可能包含了更多详细的步骤和示例代码,可以帮助你进一步理解这个主题。

    java操纵xml文件的读写,并根据xml生成树型菜单

    ### Java操作XML文件读写与树型菜单生成详解 #### 一、背景介绍 在现代软件开发中,XML(Extensible Markup Language)被广泛应用于数据交换、配置文件管理以及多种跨平台的应用场景中。Java作为一种重要的后端开发...

    Xml文件读写示例

    在这个“Xml文件读写示例”中,我们将深入探讨如何在Java或类似的编程环境中进行XML文件的读取和写入操作。 XML文件的基本结构包括元素(Element)、属性(Attribute)、文本内容(Text Content)、注释(Comment)...

    Java与XML读写之DOM篇

    Java与XML的交互是开发中常见的一种数据处理方式,特别是在需要处理结构化数据时。DOM(Document Object Model)是一种在Java中处理XML的标准方法,它将XML文档转换为一棵对象树,使得我们可以方便地访问和修改XML...

    java 操作xml文件(包含xml文件和对应jar包)

    Java操作XML文件是Java开发中常见的一项任务,特别是在处理配置、数据交换或存储结构化信息时。XML(Extensible Markup Language)是一种标记语言,它的结构清晰、可读性强,易于机器解析和生成。本篇文章将深入探讨...

    用java读取修改xml文件的代码实现

    本文将详细介绍如何使用Java来读取和修改XML文件,主要涉及以下几个核心知识点: 1. **DOM解析器**: Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。...

    java读取和写入xml文件

    在Java中,处理XML文件主要有四种方式:DOM(Document Object Model)、SAX(Simple API for XML)、StAX(Streaming API for XML)以及JAXB(Java Architecture for XML Binding)。下面将详细介绍这四种方法。 1....

    XML.rar_XML java_java call_java xml_xml 读写_xml读写 java

    至于“xml读写_java”,Java提供了多种方式来读写XML文件。使用DOM解析器,可以创建DocumentBuilder实例,然后使用parse()方法解析XML文件得到Document对象,再通过getElementsByTagname()等方法获取元素,最后用...

    Java从xml文件里面读写图片

    在Java编程中,从XML文件中读取和写入图片是一项常见的任务,特别是在处理数据存储或交换时。这篇博文(虽然链接无法直接访问)可能详细介绍了如何利用Java库DOM4J和Jaxen来实现这一功能。DOM4J是一个强大的Java XML...

    一次代码重构之旅-快速读写xml文件工具类封装

    在描述中提到的博客文章“一次代码重构之旅-快速读写xml文件工具类封装”,作者分享了如何通过Java进行XML操作的优化,将原始的XML处理代码整合到一个工具类中,提供简洁易用的API。在阅读该博客文章的过程中,我们...

    XML文件读写Demo.zip

    这个“XML文件读写Demo.zip”是一个演示如何在编程环境中操作XML文件的示例,包含创建、保存和读取XML文件的基本步骤。 首先,我们需要了解XML文件的基本结构。XML文件由一系列的元素(Element)组成,每个元素由...

    用java读写xml文件

    ### 使用Java进行XML文件的读写 #### 一、引言 XML(Extensible Markup Language,可扩展标记语言)是一种非常流行的用于存储和传输数据的标准格式。它具有良好的跨平台特性,易于理解和处理,因此在数据交换场景中...

    xml文件的操作,包括xml文件读写,添加删除结点等

    本文将深入探讨XML文件的操作,包括XML文件的读写、添加和删除节点等关键知识点。 首先,XML文件的读写是操作的基础。在Python中,可以使用`ElementTree`库来处理XML。`ElementTree`提供了`parse()`函数来解析XML...

    JAVA 生成 XML文件

    XML文件结构清晰,易于读写,并且具有良好的跨平台支持。本篇文章将深入探讨如何使用Java来生成XML文件,并结合数据库操作进行数据提取。 首先,我们需要了解XML的基本结构。XML文件由一系列元素组成,每个元素都有...

Global site tag (gtag.js) - Google Analytics