假設我將擁有一個xml,並且我想驗證此文件是否使用.net(C#)驗證是否如下所示:僅當給定屬性不存在至少一次或包含給定值時才加載XML
如果沒有以上- 如果文件節點中的至少一個沒有過濾器,做一些
- 如果所有的文件有一個篩選器屬性,這 的至少一個過濾器值相匹配做點什麼
- 遇到,什麼也不做
我一直在努力掙扎,並且想出了非常複雜的代碼,我相信這可以做得更簡單,就像我嘗試的那樣。
一些例子:接受濾波器值將是「NL」
<!-- some nodes above -->
<file name="something"/>
<file name="something else"/>
<file name="and something else" filter="en, fr, de"/>
<!-- more nodes below -->
這通過作爲有至少一個文件,而無需過濾器值
<!-- some nodes above -->
<file name="something" filter="nl, hu"/>
<file name="something else" filter="ru"/>
<file name="and something else" filter="en, fr, de"/>
<!-- more nodes below -->
這也將傳遞至少一個文件匹配'nl'限制(第一個文件)
<!-- some nodes above -->
<file name="something" filter="pt, hu"/>
<file name="something else" filter="ru"/>
<file name="and something else" filter="en, fr, de"/>
<!-- more nodes below -->
這一個應該失敗,因爲既不o ne的文件缺少filter屬性,並且任何一個篩選器都不包含'nl'
任何關於什麼是最簡單和最有效的方式來實現此目的的建議?
除非你有節點的船載(即成千上萬)來檢查,我簡單地閱讀完整的XML數據使用'XmlSerializer'的大風扇爲內存數據對象模型。然後,您可以使用任何內置的C#代碼/邏輯來過濾數據。除非您遇到特定的性能問題,否則我認爲它是最簡單和最易維護的。 (獎勵:您可以使用此相同的邏輯來驗證您的文件過濾器,如果你有用戶在程序中進行編輯)編輯:Bonus2:它分開你的序列化的擔憂使其易於添加/更改過濾器,或更好的跟蹤/報告或單元測試的問題。 –