![](/img/trans.png)
[英]System.IO.DirectoryNotFoundException: When validating XML against a XSD
[英]Validating XML against XSD when XSD changes
假設我有一個名為xsd1
的XSD
模式。 假設生成的類看起來像
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
我只想Prop1
和Prop2
被序列化。
您的問題類似於架構版本問題,在添加新元素的同時尋求向前和向后兼容性。 那根本不可能。
添加可選元素可以使對XSD 1有效的XML在新版本XSD 2中繼續有效。 那部分很好。 但是,任何包含可選的new元素的XML對原始版本XSD 1均無效。
當我發布新的架構時,客戶需要時間來適應他們的代碼。
足夠公平-這是一個共同的要求。
我們的客戶向我們發送數據(對象,而不是xml)
這與推薦的最佳做法不符。
他們確定應針對哪個架構進行驗證
然后要么通過在過渡期間支持兩個XSD來兌現他們的承諾(而不是試圖擊敗它),要么通過xsd:any
類的自由機制為XSD增強靈活性。 這取決於您,但是您不能期望同時進行嚴格和自由驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.