2015-03-25 202 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