论坛首页 Java企业应用论坛

[已解决]Digester中验证的问题!试了N久

浏览 6628 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-08-23  
我正在使用Digester用来解析一段XML.
但如何使用Digester来验证XML中每个字段的正确性呢?比如空值,类型不对等.
想到使用dtd.但是不知道在Digester如何使用.原先的那个XML是按自己的模板输出出来的并不包含dtd信息.
Digester中有一个setSchema()方法.用他可以验证吗?怎么用呢?
请人指教谢谢.
   发表时间:2006-08-23  
digester只负责将xml转换成为object
然后校验object的属性是否正确不就OK了么?
0 请登录后投票
   发表时间:2006-08-23  
Readonly 写道
digester只负责将xml转换成为object
然后校验object的属性是否正确不就OK了么?

不行啊.这样不就是把验证交给后台做了嘛.这样做我认为会影响效率.解析一个XML文件如果内容较少,这样用后台验证是可行的(但其实还是觉得不妥).但是如果内容较多.后台验证的效率就将是一个问题,因此我想在他解析的时候能够自己进行判断.这样解析就完整了,而不需要后台验证.
0 请登录后投票
   发表时间:2006-08-23  
zlkn2005 写道
Readonly 写道
digester只负责将xml转换成为object
然后校验object的属性是否正确不就OK了么?

不行啊.这样不就是把验证交给后台做了嘛.这样做我认为会影响效率.解析一个XML文件如果内容较少,这样用后台验证是可行的(但其实还是觉得不妥).但是如果内容较多.后台验证的效率就将是一个问题,因此我想在他解析的时候能够自己进行判断.这样解析就完整了,而不需要后台验证.


你测过了?
0 请登录后投票
   发表时间:2006-08-23  
badqiu 写道
zlkn2005 写道
Readonly 写道
digester只负责将xml转换成为object
然后校验object的属性是否正确不就OK了么?

不行啊.这样不就是把验证交给后台做了嘛.这样做我认为会影响效率.解析一个XML文件如果内容较少,这样用后台验证是可行的(但其实还是觉得不妥).但是如果内容较多.后台验证的效率就将是一个问题,因此我想在他解析的时候能够自己进行判断.这样解析就完整了,而不需要后台验证.


你测过了?


测试数据并为准备。
但是,已我个人的理解,如果用后台验证,将是一种破坏设计思路的方法。我觉得这样做不妥当。
求,如何在Digester中验证。谢谢!
0 请登录后投票
   发表时间:2006-08-23  
zlkn2005 写道
badqiu 写道
zlkn2005 写道
Readonly 写道
digester只负责将xml转换成为object
然后校验object的属性是否正确不就OK了么?

不行啊.这样不就是把验证交给后台做了嘛.这样做我认为会影响效率.解析一个XML文件如果内容较少,这样用后台验证是可行的(但其实还是觉得不妥).但是如果内容较多.后台验证的效率就将是一个问题,因此我想在他解析的时候能够自己进行判断.这样解析就完整了,而不需要后台验证.


你测过了?


测试数据并为准备。
但是,已我个人的理解,如果用后台验证,将是一种破坏设计思路的方法。我觉得这样做不妥当。
求,如何在Digester中验证。谢谢!


写个DTD,再digester.setValidating(true);
0 请登录后投票
   发表时间:2006-08-23  
badqiu 写道
zlkn2005 写道
badqiu 写道
zlkn2005 写道
Readonly 写道
digester只负责将xml转换成为object
然后校验object的属性是否正确不就OK了么?

不行啊.这样不就是把验证交给后台做了嘛.这样做我认为会影响效率.解析一个XML文件如果内容较少,这样用后台验证是可行的(但其实还是觉得不妥).但是如果内容较多.后台验证的效率就将是一个问题,因此我想在他解析的时候能够自己进行判断.这样解析就完整了,而不需要后台验证.


你测过了?


测试数据并为准备。
但是,已我个人的理解,如果用后台验证,将是一种破坏设计思路的方法。我觉得这样做不妥当。
求,如何在Digester中验证。谢谢!


写个DTD,再digester.setValidating(true);


其实我个人认为似乎你说的还不明确,应该这样吧
看API是这样写的。
URL url = new URL("/org/apache/struts/resources/struts-config_1_0.dtd");
    digester.register
      ("-//Apache Software Foundation//DTD Struts Configuration 1.0//EN",
       url.toString());
因为本人的XML中并为包含DTD。而DTD又是挂在网上的。所以我又改造了下
File dtdFile = new File("/test.dtd");
        URL url = dtdFile.toURL();
        digester.register
          ("-//Apache Software Foundation//DTD Struts Configuration 1.0//EN",
           url.toString());

类似这样。
至于digester.setValidating(true);还没有试.
0 请登录后投票
   发表时间:2006-08-23  
zlkn2005 写道
Readonly 写道
digester只负责将xml转换成为object
然后校验object的属性是否正确不就OK了么?

不行啊.这样不就是把验证交给后台做了嘛.这样做我认为会影响效率.解析一个XML文件如果内容较少,这样用后台验证是可行的(但其实还是觉得不妥).但是如果内容较多.后台验证的效率就将是一个问题,因此我想在他解析的时候能够自己进行判断.这样解析就完整了,而不需要后台验证.

你用dtd只能校验数据是否必需吧,难道dtd能够校验数据格式,复杂逻辑?
比如要求时间格式必须是yyyy-MM-dd,dtd如何校验?
比如要求某个数字必须是在0和100之间,dtd又如何校验?
再比如要求2个时间要有先后顺序:
<production-date>2005-07-25</production-date>
<expiry-date>2006-07-25</expiry-date>

这些还不是得针对一个object进行校验,弄dtd搞不定的啊

谈到效率,你没有实际测试怎么知道dtd的效率高?实际上dtd检验是效率最最差的一种方法了。
0 请登录后投票
   发表时间:2006-08-23  
Readonly 写道
zlkn2005 写道
Readonly 写道
digester只负责将xml转换成为object
然后校验object的属性是否正确不就OK了么?

不行啊.这样不就是把验证交给后台做了嘛.这样做我认为会影响效率.解析一个XML文件如果内容较少,这样用后台验证是可行的(但其实还是觉得不妥).但是如果内容较多.后台验证的效率就将是一个问题,因此我想在他解析的时候能够自己进行判断.这样解析就完整了,而不需要后台验证.

你用dtd只能校验数据是否必需吧,难道dtd能够校验数据格式,复杂逻辑?
比如要求时间格式必须是yyyy-MM-dd,dtd如何校验?
比如要求某个数字必须是在0和100之间,dtd又如何校验?
再比如要求2个时间要有先后顺序:
<production-date>2005-07-25</production-date>
<expiry-date>2006-07-25</expiry-date>

这些还不是得针对一个object进行校验,弄dtd搞不定的啊

谈到效率,你没有实际测试怎么知道dtd的效率高?实际上dtd检验是效率最最差的一种方法了。


关于你的疑问,不错,我现在就是想校验他的必需性。
关于效率马上就能知道了,已经准备10000条数据做测试。
0 请登录后投票
   发表时间:2006-08-23  
测试N久发现还是不对。
DTD已经准备好了,存在错误的XML也有。不过代码执行的很正常。没有一点异常。错误的数据依然读了进来。
有没人有这方面的经验。
当前在下有考虑使用Schema 的想法,不过不知道怎么做。请人帮忙。谢谢
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics