以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  [求助]在java中如何用xsd验证xml文件  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=16873)


--  作者: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定义的格式也会通过验证
请各位帮忙看一下,一起讨论讨论,不甚感激!


--  作者:zyren06
--  发布时间:4/14/2005 8:12:00 PM

--  
仍然在研究中!!!
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
6,889.648ms