2015-03-25 110 views
0

我有一个xml文件,其数据需要使用250多个规则进行验证,xml的大小可以从4MB到50 MB。有以下问题。需要验证xml - 需要帮助

  1. 下,规则应该被定义,我想他们动态控制
  2. 由于数据输入是XML的大小(而非硬编码),我应该如何处理这个问题(考虑规则可能会改变等)的用户界面和XML标签名称的 3.名称将是不同的,所以应该在什么时候翻译发生

以下是XML的结构

<DATA> 
<Parent> 
    <Fields> 
    //All the data like name, age, height, weight, blood group etc goes here 
    </Fields> 
    <Childs> 
    <Name = 'Andrew' id = 7560> 
    ....... 
    </Childs> 
    <Relatives> 
    //Relationships 
    </Relatives> 
</Parent> 
    <Children> //For each children it list their details 
     //All the data like name, age, height, weight, blood group etc goes here 
    </Children> 
    <Relationships>//For each relationship it list their details 
    </Relationship> 
</Data> 

谢谢

回答

0

我会创建另一个包含规则集的XML。

在规则中,如果您只需要确保层次结构有效并且必须包含某种数据类型,那么我会制作一个“规则”XML,它是完全有效的XML的完整层次结构,包含里面的代码与每一个可能有效孩子的和属性,其中也包含了所需的数据类型为字符串值的所有节点,例如

<age>"int"</age> 

,您可以通过层次读和组成树状结构,它可以很容易地验证层次结构。

如果有更详细的规则,例如如果某个节点是强制性的,并且如果失踪则认为无效,您可以设置一个属性,如“isMandatory”,在构建树时可以读取该属性,并执行检查某个XML节点是否包含强制子节点!

这将是一个动态的方法,因为您所要做的只是编辑规则XML,并且您的代码可以完美扩展以适应未来的规则。

我以前亲自使用过这个方法,当我需要确保层次结构正确并且节点包含正确的属性时,除非看到您有大量规则,否则您可能需要不同的结构。

编辑: 我会使用DOM解析器来解析XML。 DOM解析模型被认为是内存效率低下的问题,但对于您的情况而言,在执行方面将非常有效。 http://howtodoinjava.com/2014/07/31/java-xml-dom-parser-example-tutorial/#parse_known_xml 您可以在Oracle网站上阅读更多关于DOM解析器API的信息。

其次,您可以根据自己的设置验证方法来获得创意。这可以用于你的例子非常简单的验证XML是:

进行验证
<DATA> 
    <Parent isRequired="true"> 
     <Fields> 
      <Name isRequired="true"> 
       <Type>string</Type> 
      </Name> 

      <Age isRequired="false"> 
       //Cannot have more than one age field 
       <Rules> 
        <MaxCount>1</MaxCount> 
       </Rules> 
      </Age> 

      // etc etc for other fields 

      <Rules> 
       //Having name and an age throws error 
       <Rule>Name + Age</Rule> 

       //Throw error if there is a height element together with an age or a bloodtype 
       <Rule>(Age | Bloodtype) + Height</Rule> 



      </Rules> 

     </Fields> 
    </Parent> 
</DATA> 

方法是从(规则XML)根节点开始,并期待所有的孩子的。确保数据XML中存在所有强制节点。确保所有叶节点数据类型都正确。

将所有节点解析为一个字符串,并以类似的方式解决带注释的int表达式,确保孩子遵循规则表达式。

您不需要使用相同的示例格式,和+。要富有创造性,弄清楚什么“规则表达”最适合你:)

整体来说,你可能有很多不同的“规则类型”规则。例如,一个规则可能需要一个必须拥有的节点,而一个规则可能确保某个节点不存在(如果另一个节点不存在),并且一个规则可能是某个节点不能存在多次。 为了支持如此多的不同类型,如果验证,结构可能最终变得复杂,但如果您需要真正的动态规则(最终也可以重复使用),那么肯定会付出努力。

+0

感谢您的回复。当前的规则被列为“如果节点1 = xyz并且节点2 = lmn然后抛出错误(节点1和2是在Excel中的标签名称)”,在某些情况下它可以具有5个不同的元素和/或条件。目前我有三个问题1.如何将规则存储在xml文件中,我的意思是结构2.如何解析xml(源)3.如何将规则转换为xml标签名称,因为UI字段名称和xml标签名字是不同的 – 2015-03-25 08:37:38

+0

@DougParker看看编辑过的答案,看它是否回答你的问题。 – JTY 2015-03-25 09:46:39