簡體   English   中英

XSD更改時針對XSD驗證XML

[英]Validating XML against XSD when XSD changes

假設我有一個名為xsd1XSD模式。 假設生成的類看起來像

public class ClassA
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

然后,我創建一個新的模式xsd2這幾乎是一樣的xsd1。 它僅具有一個int類型的元素Prop3 然后, ClassA更改為

public class ClassA
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
    public int Prop3 { get; set; }
}

現在,當我將ClassA的實例序列化為XML時,針對xsd1驗證失敗,並顯示以下消息:

無效的子元素“ Prop3”

如何使兩個驗證都成功? 我不要兩個單獨的課。

更新資料

序列化對象

var a = new ClassA() { Prop1 = "p1", Prop2 = "p2" };

看起來像

<ClassA>
    <Prop1>p1</Prop1>
    <Prop2>p2</Prop2>
</ClassA>

當我將Prop3添加到ClassA ,序列化的對象a

<ClassA>
    <Prop1>p1</Prop1>
    <Prop2>p2</Prop2>
    <Prop3>0</Prop3>
</ClassA>

因此對於模式xsd1 當對驗證xsd1我只想Prop1Prop2被序列化。

您的問題類似於架構版本問題,在添加新元素的同時尋求向前和向后兼容性。 那根本不可能。

添加可選元素可以使對XSD 1有效的XML在新版本XSD 2中繼續有效。 那部分很好。 但是,任何包含可選的new元素的XML對原始版本XSD 1均無效。

更新資料

當我發布新的架構時,客戶需要時間來適應他們的代碼。

足夠公平-這是一個共同的要求。

我們的客戶向我們發送數據(對象,而不是xml)

這與推薦的最佳做法不符。

他們確定應針對哪個架構進行驗證

然后要么通過在過渡期間支持兩個XSD來兌現他們的承諾(而不是試圖擊敗它),要么通過xsd:any類的自由機制為XSD增強靈活性。 這取決於您,但是您不能期望同時進行嚴格和自由驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM