-- 作者:zyren06
-- 发布时间:4/12/2005 8:41:00 AM
-- [求助]在java中如何用xsd验证xml文件
各位朋友,在java中如何用xsd文件验证xml是否符合xsd规定的格式呢??? 我写了一段代码如下: /** * 使用xsd验证xml * @param xmlfilename String xml文件 包括路径 * @param xsdfilename String xsd文件 包括路径 * @param validatesuccess boolean 是否验证成功 成功返回true, * @return boolean 成功返回true 失败返回false */ 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; final String SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; final String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; final String SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource"; SAXParserFactory factory=SAXParserFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(true); try{ SAXParser parser=factory.newSAXParser(); parser.setProperty(SCHEMA_SOURCE,xsdfile); parser.setProperty(SCHEMA_LANGUAGE,XML_SCHEMA); //parser.setProperty(SCHEMA_SOURCE,xsdfile); 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; } 可能是这段代码有问题,在执行验证时,有时好像这个验证函数不起作用,即使xml的格式明显不符合xsd定义的格式也会通过验证 请各位帮忙看一下,一起讨论讨论,不甚感激!
|