正则表达式处理XML文件 高手们看一下吧!
本人想从一XML文件中读取出来,然后用正则表达式判断一下该文件是否是XML文件,自己尝试编了一个小程序,可是遇到了一些逻辑上的错误:越看越迷,请高手们指点一下吧!!
本人要读取的XML文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<student>
   <id>01</id>
</student>
本人编写的代码如下:
package wang.regex.file;
import java.io.*;
import java.util.regex.*;
public class RegexFile
{
	public static void main(String[] args)
	{
		// TODO 自动生成方法存根
		try
		{
			File f = new File("D:\\王山虎\\资料\\正则表达式解析xml\\lianxi01.xml");
			FileReader fr = new FileReader(f);
			BufferedReader br = new BufferedReader(fr);
			String line = br.readLine();
			System.out.println(line);
			Pattern p = Pattern
					.compile("<\\?xml\\sversion=\"1.0\"\\sencoding=\"UTF-8\"\\?>");
			Matcher m = p.matcher(line);
			boolean b = m.matches();
			System.out.println("加上读取文件时的匹配了:" + b);
			if (ceshiOther(br))
			{
				System.out.println("匹配成功!!");
			}
		} catch (
FileNotFoundException e)
		{
			// TODO 自动生成 catch 块
			e.printStackTrace();
			System.out.println("没有发现该文件!!");
		} catch (
IOException e)
		{
			// TODO 自动生成 catch 块
			System.out.println("读取文件失败!!");
			e.printStackTrace();
		}
	}
	public static boolean ceshiOther(BufferedReader br)
	{
		String line = null;
		Pattern p1 = Pattern.compile("\\s*<\\w{1,}>");
		Pattern p2 = Pattern.compile("\\s*<\\w{1,}.*</\\w{1,}>");
		Pattern p3 = Pattern.compile("\\s*</\\w{1,}>");
		boolean flag1 = false;
		boolean flag2 = false;
		int i = 1;
		try
		{
			while ((line = br.readLine()) != null)
			{
				System.out.println(line + "	" + i);
				Matcher m1 = p1.matcher(line);
				if (m1.matches() == false)
				{
					Matcher m2 = p2.matcher(line);
					flag2 = m2.find();
					System.out.println(m2.find());
					// continue;
				} else if (flag2 == false && (m1.find() == false))
				{
					System.out.println("程序执行到这了啊!!");
					Matcher m3 = p3.matcher(line);
					// System.out.println(m3.matches());
				}
				i++;
			}
			if (flag2)
			{
				flag1 = true;
			}
		} catch (IOException e)
		{
			// TODO 自动生成 catch 块
			e.printStackTrace();
			System.out.println("读取其它文件时失败了!!");
		}
		return flag1;
	}
}
------解决方案--------------------答:不明白楼主为何要这样做.我的意思是说:你为何不使用JAVA中已经有的许多个直接处理XML文档的类库包来做呢?为何非要抱着个正则表达式来吃力又不讨巧的事呢?
  以上想法仅供你参考.
------解决方案--------------------"然后用正则表达式判断一下该文件是否是XML文件"
为什么用正则表达式来判断呢,直接判断字符串的后四位不行吗?
------解决方案--------------------这样我不懂哦
如果是这样子,不如直接就判断字符串是否相同啊.
------解决方案--------------------用Dom4j中的DocumentHelper类很方便.如:
public   static   void   main(String[]   args)   {
String   sXml   =   " <?xml   version=\ "1.0\ "   encoding=\ "utf-8\ "?> <ROOT> <TABLE> 哈哈哈哈 </TABLE> </ROOT> ";
SAXReader   saxReader   =   new   SAXReader();
try   {
Document   document   =   DocumentHelper.parseText(sXml);
}   catch   (DocumentException   e)   {
//   TODO   Auto-generated   catch   block
e.printStackTrace();
}
}  
如果sXml不符合xml文件格式的话,会抛出异常...