用户操作
[即时聊天] [发私信] [加为好友]
曹翔ID:java_xiang
16222次访问,排名7304(1)好友1人,关注者2
阿翔编程学
java_xiang的文章
原创 43 篇
翻译 0 篇
转载 7 篇
评论 8 篇
曹翔的公告
WebService,Java,J2EE 任何个人和单位均可免费复制,拷贝,复制时请注明出处。但如需商业用途或者使用,修改其中的全部或者部分代码,图片。请先和作者联系.
最近评论
asdf:很好,谢谢分享
xiang:恩,好吧,那句话怎么说的,反正就是帮人帮到底的意思吧。
丫头:这个多代码,别人找都难找,想想起他改良的办法啦,帮人帮到底么。。。。
xunmenglin:义愤填庸了~~~~
xunmenglin:我顶阿
楼主说得好啊
文章分类
收藏
    相册
    阿翔的相册
    Blog链接
    傻丫头的Blog
    冰冻小子的Blog
    大中华办公软件在线
    我的CSDN博客
    我的新浪Blog
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 阿翔编程学-Java XML文件的验证收藏

    新一篇: 阿翔编程学-HttpClient | 旧一篇: 阿翔编程学-Java文件操作

    package com.ocuf.oais.common;

    import java.io.FileInputStream;

    import java.util.ArrayList;
    import java.util.List;

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.SAXWriter;

    import org.iso_relax.verifier.Schema;
    import org.iso_relax.verifier.Verifier;
    import org.iso_relax.verifier.VerifierFactory;
    import org.iso_relax.verifier.VerifierHandler;

    import org.xml.sax.ErrorHandler;
    import org.xml.sax.SAXParseException;

    import com.ocuf.oais.module.ErrorModule;

    /**
     * 档案信息文件的验证
     * @author CaoXiang
     *
     */
    public class ValidatXML {
     
     private String realPath = this.getClass().getClassLoader().getResource("/").getPath();
     
     /**
      * 检测文件格式是否正确
      * @param filename
      * @return
      */
        public List<ErrorModule> run(String filename) {
         //保存错误信息的集合对象
         List<ErrorModule> list = null;
         try {
          FileInputStream stream = new FileInputStream(realPath+"com//ocuf//oais//metadata//file//filetemp//"+filename);
             //InputStream stream = this.getClass().getResourceAsStream(filename);
                SAXReader reader = new SAXReader();
                Document document = reader.read(stream);
                list = process(document);
            } catch (DocumentException e) {
                System.out.println("发生错误: " + e);
                Throwable nestedException = e.getNestedException();
                if (nestedException != null) {
                    System.out.println("发生错误: " + nestedException);
                    nestedException.printStackTrace();
                } else {
                    e.printStackTrace();
                }
            } catch (Throwable t) {
                System.out.println("发生错误: " + t);
                t.printStackTrace();
            }
            //返回
            return list;
        }

        /**
         * 检测文件格式是否有效
         * @param document
         * @return
         * @throws Exception
         */
        protected List<ErrorModule> process(Document document)
                throws Exception {
         //保存错误信息的集合对象
         final List<ErrorModule> errorList = new ArrayList<ErrorModule>();
         FileInputStream schemaStr = new FileInputStream(realPath+"com//ocuf//oais//metadata//file//filemodule//Archive.xsd");
         //this.getClass().getResourceAsStream("com//ocuf//oais//metadata//file//filetemp//Archive.xsd");
            VerifierFactory factory = new com.sun.msv.verifier.jarv.TheFactoryImpl();
            Schema schema = factory.compileSchema(schemaStr);
            Verifier verifier = schema.newVerifier();
            //各种类型的错误输出
            verifier.setErrorHandler(new ErrorHandler() {
                public void error(SAXParseException e) {
                 ErrorModule errorModule = new ErrorModule();
                 errorModule.setId(String.valueOf(e.getLineNumber()));
                 errorModule.setDesctipt(e.getMessage());
                 errorModule.setLeavel("top");
                 errorModule.setType("error");
                 errorList.add(errorModule);
                    //System.out.println("错误: " + e);
                }

                public void fatalError(SAXParseException e) {
                 ErrorModule errorModule = new ErrorModule();
                 errorModule.setId(String.valueOf(e.getLineNumber()));
                 errorModule.setDesctipt(e.getMessage());
                 errorModule.setLeavel("middle");
                 errorModule.setType("fatal");
                 errorList.add(errorModule);
                    //System.out.println("失败: " + e);
                }

                public void warning(SAXParseException e) {
                 ErrorModule errorModule = new ErrorModule();
                 errorModule.setId(String.valueOf(e.getLineNumber()));
                 errorModule.setDesctipt(e.getMessage());
                 errorModule.setLeavel("button");
                 errorModule.setType("warning");
                 errorList.add(errorModule);
                    //System.out.println("警告: " + e);
                }
            });
            //System.out.println("正在验证XML文件...");
            VerifierHandler handler = verifier.getVerifierHandler();
            SAXWriter writer = new SAXWriter(handler);
            writer.write(document);
            for(int i=0;i<errorList.size();i++) {
       ErrorModule tempModule = errorList.get(i);
             String tempStr = tempModule.getDesctipt();
             //标签为"标识码"项不被允许,请尝试标签为"对应号"的项
             if(tempStr.startsWith("tag") && tempStr.endsWith(">")) {
              int fitstIndex = tempStr.indexOf("e");
              fitstIndex+=2;
              int secondIndex = tempStr.indexOf("i");
              secondIndex-=2;
              String firstStr = tempStr.substring(fitstIndex+1, secondIndex);
              int threeIndex = tempStr.indexOf("<");
              int fourIndex = tempStr.indexOf(">");
              String secondStr = tempStr.substring(threeIndex+1,fourIndex);
              String totalStr = firstStr + secondStr;
              tempModule.setDesctipt(firstStr);
              tempModule.setBecause("不被允许");
              tempModule.setWheredo("对应号的项");
             }
             //发现"内容信息"项没有被正确使用
             else if(tempStr.startsWith("element") && tempStr.endsWith("occur")) {
              int fitstIndex = tempStr.indexOf("t");
              fitstIndex+=2;
              int secondIndex = tempStr.indexOf("w");
              secondIndex-=2;
              String firstStr = tempStr.substring(fitstIndex+1, secondIndex);
              String totalStr = firstStr;
              tempModule.setDesctipt(firstStr);
              tempModule.setBecause("没有被正确使用");
              tempModule.setWheredo("正确使用");
             }
            }
            return errorList;
        }
    }
     

    发表于 @ 2007年05月31日 15:00:00|评论(loading...)|编辑

    新一篇: 阿翔编程学-HttpClient | 旧一篇: 阿翔编程学-Java文件操作

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 曹翔