2011-12-01 66 views
1

,我的問題是這樣的:自定義驗證類型在.NET

  1. 我有很多的由第三方產生的XSD文件,檢查文件類型的一致性
  2. 它們使用標準類型(即gYeardate)而沒有意識到它們的真實限制
  3. 它們也在其側面使用硬編碼檢查,這些檢查具有更多限制,然後使用XSD中使用的這些標準類型(即數字之前或之後的空格gYear沒問題,但會失敗)
  4. 更改模式真的不是很長的路要走(XSD文件衆多,頻繁更新)

所以,這裏的問題:我能做些什麼,以實施更嚴格的規則來驗證一些標準類型的? 我使用.NET 3.5(C#),我們有一個圍繞標準XmlReader的包裝,所以使用第三方項目根本不是一個選項。 我想加載額外的架構文件與一些預先定義的類型,將擴展/覆蓋所需的類型,以某種方式捕捉的時刻,當需要的類型驗證節點,我可以偷看所述節點的價值,但我我不知道如何繼續。

附加要求:驗證過程應該是流式傳輸(即沒有0​​等)。

+0

您正在收發消息嗎? –

+0

@hugh我正在發送用戶生成的內容 – 13xforever

回答

0

那麼,據我所知,這個問題真的沒有任何簡單的解決方案。

我可以想到的最好的方法是在讀取緩存時修改模式。

我只是刪除type="xs:gYear"並添加<simpleType>子元素(如果需要):

<xs:simpleType> 
      <xs:restriction base="xs:string"> 
        <xs:pattern value="^(19|2\d)\d{2}$" /> 
      </xs:restriction> 
    </xs:simpleType> 

幸運的是,我們有基礎設施,以翻譯驗證錯誤的人類可讀的錯誤,所以不應該有對實際模式與這些元素的驗證錯誤之間的差異感到困惑。

此外,大說明接着一個事實,即在XML Schema中的每一個類型都有小whiteSpace設置爲collapse,所以你不能從更合適的類型,如gYearshortdecimal繼承。