2011-12-25 59 views
2

有沒有辦法告訴XmlSchemaSet在編譯期間忽略包含?如何在編譯期間關閉XSD中的包含?

var schemaSet = new XmlSchemaSet(); 
schemaSet.ValidationEventHandler += ValidationCallback; 
schemaSet.Add(targetNamespace, filepath); 
schemaSet.Compile(); 

如果我不編譯,忽略了包括,但我沒有得到XmlSchemaElementElementSchemaType屬性,但它仍然無效。

回答

2

如果你也可以描述爲什麼你想在編譯期間忽略外部引用,那將會更有意思。通常,需要這些外部引用(包括或導入),因爲這些引用將爲實際引用的組件(例如類型,元素,組等)提供定義。一般而言,一個小心點是重新定義不能關閉(它會立即失敗)。

最接近您的要求是定義自定義解析器(從XmlUrlResolver延伸),您通過XmlReaderSettings與您的閱讀器相關聯; 「關閉」會在重寫GetEntity方法中返回null。

如果不是「關閉」你會發現你需要一個「重定向」,那麼上面的肯定是你如何可以把它(而不是一個空,你會返回一個流到你想要的模式)。

你必須記住的一件事是,如果XmlSchemaSet需要包含/導入你想關閉,它不會編譯,如果它不解決。如果它沒有編譯,那麼所有的PSVI屬性(ElementSchemaType就是其中之一)將不會被填充。哪種回到你爲什麼想要這樣的事情?

+0

我已經意識到在過去3周的過程中,會關閉或關閉什麼。我意識到我真的需要它。我想關掉包括進口,因爲我是迭代thorugh模式中的所有類型,然後將它們轉換成JSONSchema。現在,我已經成功地做到了這一點。最初的架構的遞歸特性將讓我頭痛,副作用仍然persist.I希望所有有關架構的可能的信息,然後將它寫出來,以JSONSchema。奇怪的要求我猜,但它確實證明是一個深思熟慮的練習。 – 2012-01-10 16:09:58