factory.setAttribute(
"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
factory.setAttribute(
"http://java.sun.com/xml/jaxp/properties/schemaSource",
"file:" + xsdPath);
"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
factory.setAttribute(
"http://java.sun.com/xml/jaxp/properties/schemaSource",
"file:" + xsdPath);
parser.setProperty(SCHEMA_LANGUAGE, XML_SCHEMA);
//parser.setProperty(SCHEMA_SOURCE,xsdfile);
这段代码不不对factory.setAttribute(
"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
factory.setAttribute(
"http://java.sun.com/xml/jaxp/properties/schemaSource",
"file:" + xsdPath);
parser.setProperty(SCHEMA_SOURCE, xsdfile);
parser.setProperty(SCHEMA_LANGUAGE, XML_SCHEMA);
//parser.setProperty(SCHEMA_SOURCE,xsdfile);
这段代码不不对parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", "file:" + xsdPath);
xsdPath 是schema文件的绝对路径
public boolean validatexmlbyxsd(String xmlfilename,String xsdfilename,boolean validatesuccess){
File xmlfile=new File(xmlfilename);
File xsdfile=new File(xsdfilename);
//检测原文件和验证文件是否存在
if(!((xmlfile.exists())&&(xsdfile.exists())))
{return false;}
SAXParserFactory factory=SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
try{
SAXParser parser=factory.newSAXParser();
parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", "file:" + xsdfilename);
parser.parse(xmlfile, new DefaultHandler());
validatesuccess = true;
}catch(SAXNotRecognizedException ex){
System.err.println("未知的属性异常:"+ex.getMessage());
validatesuccess=false;
}catch(SAXNotSupportedException ex){
System.err.println("不支持的属性:"+ex.getMessage());
validatesuccess=false;
}catch(ParserConfigurationException ex){
System.err.println("您的解析器不是jaxp 1.2所支持的"+ex.getMessage());
validatesuccess=false;
}catch(SAXException ex){
System.err.println("您的解析器不是jaxp 1.2所支持的"+ex.getMessage());
validatesuccess=false;
}catch(IOException ex){
System.err.println(""+ex.getMessage());
validatesuccess=false;
}catch(Exception ex){
System.err.println(ex.getMessage());
validatesuccess=false;
}
return validatesuccess;
}
-----------------------------------------------------
我在验证语句是:
boolean a=validatexmlbyxsd所在类的对象.validatexmlbyxsd("E:/a.xml","E:/b.xsd",false);
if(a)
{
System.out.println("yes");
}
else
{
System.out.println("failed");
}
每次的结果都是yes,即使我的xml不符合xsd的格式,结果都显示的yes啊!你能给我一个完整的例子嘛,谢谢,急得很,设计要交了.我的油箱[email protected].谢谢你了啊,帮帮忙,事成立马送分,不够再加!
parser.parse(xmlfile, new DefaultHandler());
不应该用new DefaultHandler()
应该生成一个自定义的DefaultHandler然后重写Error Warn FatalError 等方法
parser.parse(xmlfile, new MydefineDefaultHandler());
这样就可以了
你可以试一下