xml资料保存2
2011-06-20 23:25
141 查看
java中有专门读取xml文件的类和方法,下面是一个从xml文件中读取数据到标准输出的例子。
import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.w3c.dom.*;
public class DOMDemo
{
//设置输出编码格式
static final String outputEncoding="UTF-8";
private PrintWriter out;
DOMDemo(PrintWriter out)
{
this.out=out;
}
private void print(Node node)
{
//打印节点名称
out.println("NodeName=/""+node.getNodeName()+"/"");
//打印节点URI
String value=node.getNamespaceURI();
if(value!=null)
{
out.println("URL=/""+value+"/"");
}
//打印节点前缀
value=node.getPrefix();
if(value!=null)
{
out.println("Prefix=/""+value+"/"");
}
//打印节点本地名称
value=node.getLocalName();
if(value!=null)
{
out.println("LocalName=/""+value+"/"");
}
//打印节点值
value=node.getNodeValue();
if(value!=null)
{
out.println("NodeValue=");
if(value.trim().equals(""))
{
out.println("[WS]");
}
else
{
out.println("/""+node.getNodeValue()+"/"");
}
}
}
private void echo(Node node)
{
int type=node.getNodeType();
switch(type)
{
//属性节点
case Node.ATTRIBUTE_NODE:
out.println("ATTR");
print(node);
break;
//CDATA
case Node.CDATA_SECTION_NODE:
out.println("CDATA");
print(node);
break;
//注释
case Node.COMMENT_NODE:
out.println("COMMENT");
print(node);
break;
//段落节点
case Node.DOCUMENT_FRAGMENT_NODE:
out.println("DOC_FRAGMENT");
print(node);
break;
//文档节点
case Node.DOCUMENT_NODE:
out.println("DOC");
print(node);
break;
//文档类型节点
case Node.DOCUMENT_TYPE_NODE:
out.println("DOC_TYPE");
print(node);
break;
//元素节点
case Node.ELEMENT_NODE:
out.println("ELEMENT");
print(node);
//得到该节点所有属性
NamedNodeMap atts=node.getAttributes();
for(int i=0;i
{
Node att=atts.item(i);
//递归调用
echo(att);
}
break;
//实体节点
case Node.ENTITY_NODE:
out.println("ENTITY");
print(node);
break;
//实体引用节点
case Node.ENTITY_REFERENCE_NODE:
out.println("ENTITY_REF");
print(node);
break;
//处理说明节点
case Node.NOTATION_NODE:
out.println("NOTATION");
print(node);
break;
//预处理节点
case Node.PROCESSING_INSTRUCTION_NODE:
out.println("PROC_INST");
print(node);
break;
//文本节点
case Node.TEXT_NODE:
out.println("TEXT");
print(node);
break;
//未知节点
default:
out.println("UNKNOWN NODE:"+type);
print(node);
}
//遍历该节点子节点
for(Node child=node.getFirstChild();
child!=null;child=child.getNextSibling())
{
echo(child);
}
}
public static void main(String[] args)
{
//生成一个DocumentBuilderFactory
DocumentBuilderFactory dbf=
DocumentBuilderFactory.newInstance();
//生成一个DocumentBuilder
DocumentBuilder db=null;
try
{
db=dbf.newDocumentBuilder();
}
catch(ParserConfigurationException pce)
{
System.out.println(pce.toString());
}
String fileName=args[0];
//生成文档
Document doc=null;
try
{
//解析文档
doc=db.parse(new File(fileName));
}
catch(IOException ioe)
{
System.out.println(ioe.toString());
}
catch(SAXException se)
{
System.out.println(se.toString());
}
try
{
//显示DOM树
OutputStreamWriter outWriter=
new OutputStreamWriter(System.out,outputEncoding);
new DOMDemo(new PrintWriter(outWriter,true)).echo(doc);
}
catch(UnsupportedEncodingException uee)
{
System.out.println(uee.toString());
}
}
}
编译、运行如下:
E:/gongcheng>javac DOMDemo.java
E:/gongcheng>java DOMDemo aaa.xml
运行结果省略。其中的aaa.xml是相应的xml文件。
综上,主要用的类有:DocumentBuilderFactory,DocumentBuilder,NamedNodeMap,用到的接口有Document,Node,并且用到了递归调用,输出流。
import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.w3c.dom.*;
public class DOMDemo
{
//设置输出编码格式
static final String outputEncoding="UTF-8";
private PrintWriter out;
DOMDemo(PrintWriter out)
{
this.out=out;
}
private void print(Node node)
{
//打印节点名称
out.println("NodeName=/""+node.getNodeName()+"/"");
//打印节点URI
String value=node.getNamespaceURI();
if(value!=null)
{
out.println("URL=/""+value+"/"");
}
//打印节点前缀
value=node.getPrefix();
if(value!=null)
{
out.println("Prefix=/""+value+"/"");
}
//打印节点本地名称
value=node.getLocalName();
if(value!=null)
{
out.println("LocalName=/""+value+"/"");
}
//打印节点值
value=node.getNodeValue();
if(value!=null)
{
out.println("NodeValue=");
if(value.trim().equals(""))
{
out.println("[WS]");
}
else
{
out.println("/""+node.getNodeValue()+"/"");
}
}
}
private void echo(Node node)
{
int type=node.getNodeType();
switch(type)
{
//属性节点
case Node.ATTRIBUTE_NODE:
out.println("ATTR");
print(node);
break;
//CDATA
case Node.CDATA_SECTION_NODE:
out.println("CDATA");
print(node);
break;
//注释
case Node.COMMENT_NODE:
out.println("COMMENT");
print(node);
break;
//段落节点
case Node.DOCUMENT_FRAGMENT_NODE:
out.println("DOC_FRAGMENT");
print(node);
break;
//文档节点
case Node.DOCUMENT_NODE:
out.println("DOC");
print(node);
break;
//文档类型节点
case Node.DOCUMENT_TYPE_NODE:
out.println("DOC_TYPE");
print(node);
break;
//元素节点
case Node.ELEMENT_NODE:
out.println("ELEMENT");
print(node);
//得到该节点所有属性
NamedNodeMap atts=node.getAttributes();
for(int i=0;i
{
Node att=atts.item(i);
//递归调用
echo(att);
}
break;
//实体节点
case Node.ENTITY_NODE:
out.println("ENTITY");
print(node);
break;
//实体引用节点
case Node.ENTITY_REFERENCE_NODE:
out.println("ENTITY_REF");
print(node);
break;
//处理说明节点
case Node.NOTATION_NODE:
out.println("NOTATION");
print(node);
break;
//预处理节点
case Node.PROCESSING_INSTRUCTION_NODE:
out.println("PROC_INST");
print(node);
break;
//文本节点
case Node.TEXT_NODE:
out.println("TEXT");
print(node);
break;
//未知节点
default:
out.println("UNKNOWN NODE:"+type);
print(node);
}
//遍历该节点子节点
for(Node child=node.getFirstChild();
child!=null;child=child.getNextSibling())
{
echo(child);
}
}
public static void main(String[] args)
{
//生成一个DocumentBuilderFactory
DocumentBuilderFactory dbf=
DocumentBuilderFactory.newInstance();
//生成一个DocumentBuilder
DocumentBuilder db=null;
try
{
db=dbf.newDocumentBuilder();
}
catch(ParserConfigurationException pce)
{
System.out.println(pce.toString());
}
String fileName=args[0];
//生成文档
Document doc=null;
try
{
//解析文档
doc=db.parse(new File(fileName));
}
catch(IOException ioe)
{
System.out.println(ioe.toString());
}
catch(SAXException se)
{
System.out.println(se.toString());
}
try
{
//显示DOM树
OutputStreamWriter outWriter=
new OutputStreamWriter(System.out,outputEncoding);
new DOMDemo(new PrintWriter(outWriter,true)).echo(doc);
}
catch(UnsupportedEncodingException uee)
{
System.out.println(uee.toString());
}
}
}
编译、运行如下:
E:/gongcheng>javac DOMDemo.java
E:/gongcheng>java DOMDemo aaa.xml
运行结果省略。其中的aaa.xml是相应的xml文件。
综上,主要用的类有:DocumentBuilderFactory,DocumentBuilder,NamedNodeMap,用到的接口有Document,Node,并且用到了递归调用,输出流。
相关文章推荐
- xml资料保存1
- xml资料保存3
- xml资料保存4
- xml资料保存1
- eclipse编辑web.xml保存卡暴的原因及解决办法
- Unity创建并保存XML
- PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
- xml解析(读取xml,保存文件到xml)
- 让TinyXML保存文件为UTF-8格式
- 把faster-rcnn检测出来的结果保存成txt,再转成xml
- 打开某些xml网页弹出保存提示的解决办法
- OpenCV保存成XML(FileStorage)和CSV(重载<<运算符)文件
- 根据对方提供的URL获取返回的数据流并保存为XML
- xml解析——增删改查操作后将其修改结果保存
- C# DataGridView 保存 xml
- C#针对xml基本操作及保存配置文件应用实例
- msxml3.dll 错误 '80070005' 保存XML文件错误
- Unity3D如何读取保存XML,以及用U3D内置方式保存文件
- 使用XML解析器(TinyXML)编程之常用参数讲解-------转载的原版资料2
- XML文件保存时问题记录