日期:2014-05-20  浏览次数:20794 次

正则表达式处理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文件格式的话,会抛出异常...