Java 语言对XMl 格式文件的 纯解析

本文介绍XML的基本概念及其与HTML的区别,通过一个简单的示例说明如何使用Java解析XML文件,并将解析结果保存到文本文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的: 解析XML文件,把解析出的文件写到文档中保存

XML: 文件是一种可扩展标记语言,是很像HTML的标记语言;XML的设计宗旨是传输数据,而不是现实数据;XML的标签并没有被预定义,需要使用者自行定义,XML因此被设计成

一种具有自我描述性的语言。

XML和HTML之间的区别:

XML不是HTML的替代

XML被设计用来传输和存储数据,其焦点是数据的内容

HTML被设计用来显示数据,其焦点是数据的外观

XML旨在传输数据,HTML旨在显示数据

XML是各种应用程序之间进行数据传输最常用的工具。

看下面一个简单的实例:

实例是 Jani 写给 Tove 的便签,存储为 XML:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

XML的解析分析:

XMl是用来存储数据的,标签是数据的名称,两个标签之间的信息为标签的内容。这里为大家事例对XML文件通用的解析格式:标签名:内容。对XML文件的纯解析,基本思想是每行每行的进行解析,而每行要么有一对尖括号,要么有两对尖括号,每行都有一个共同的特点就是:每行的末尾都有一个换行符 ‘’\r\n’’;解析时用变量记录每一个 ’<’ 和每一个 ’>’ 。

当记录到第一个 ‘>’ 的时候,把尖括号中的字符串输出,当遇到换行符 ‘ \r\n’ 的时候,把记录 ‘<’ 和 ‘>’ 的值,还有记录字符串的值 全都置0,然后开始进行解析下一行,解析时遇到第二个 ‘<’ 时 把记录的两个尖括号之间的字符串输出,然后等到遇到这一行的换行符 ’\r\n’ 时,把用于记录的变量全部置 0  

我这里把代码进行了输出:

代码如下:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo {
	public static void mian(String args[]){
		String path = "F:/XML/nod.xml";
		String topath="F:/XML/nod1.txt";
		fun(path,topath);
		
	}
	
	/**
	 * 
	 * @param path
	 * @param topath
	 * 解析xml
	 */
	public static void fun(String path,String topath){
		FileReader read = null;
		FileWriter writ = null;
		try{
			read = new FileReader(path);
			writ = new FileWriter(topath);
			
			
			char c,c1 = 0,c2 = 0;
			String str;
			String ss="";
			String ss1="";
			String ss2="";
			String ss3="";
			int ct=0,ct1=0,ct2=0;
			int a=0;
			while(true){ 	//单个读取字符
				int temp = read.read();
				if (temp == -1) {
					break;
				}
				c= (char)temp;
	            str = String.valueOf(c);
	          
	            /**
	             * 当ss为换行时,每行的内容已解析好,此时开始下一行内容的解析,把所有值重置,开始下一行
	             */
	            if(ss.equals("\r\n")){	
	            	ss="";
	            	ct1=0;
	            	ct2=0;		  
	            	writ.write("\r\n");
	            	System.out.println();
	            //	continue;
	            	
	            }
	            
	            /**
	             * 第一次碰到<退出,第二次碰到,输出每行<>asd<>中的内容:asd
	             */
	            if(c=='<'){
	            	ct1++;
	            	if(ct1==2){
	            		
	            		writ.write(" : ");
	            		writ.write(ss);
	            		System.out.print(ss);
	            		ss="";		            		
	            	}
	            	continue;
	            }
	            /**
	             * 第一次碰到>,输出每行第一个<>中的内容
	             */
	            if(c=='>'){
	            	ct2++;
	            	if(ct2==1){
	            		System.out.print(ss);
	            		writ.write(ss);
	            		ss="";		            		
	            	}
	            	continue;
	            }
	            /**
	             * 当碰到每行最后一个>时,此时ss的内容为第二个<>中的内容,清空ss,让ss接收换行符\r\n
	             */
	           if(ct1==2&&ct2==2){
	        	   ss="";
	        	   ct1=0;
	        	   ct2=0;
	           }
	            ss+=str;		            	
	            
	            

			}
			
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			if(read!=null){
				try{
					read.close();
					writ.close();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
		
		}
	}

继续总结中~~~微笑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值