2011-07-21 91 views
4

我需要根據模式驗證xml文件的小片段。從本質上講,我想問一個問題:「XML文檔Y中的元素X是否符合模式Z中定義的類型?」並且如果沒有得到描述原因的消息。這也必須考慮對這些類型的限制(例如maxLength,minInclusive)。根據模式驗證XML元素

這可能嗎?

+0

爲什麼不驗證整個文檔?另外,你有什麼嘗試? –

+0

我主要關心一個給定的值是否落入可接受的參數範圍內。我真的不在乎文件是否有效。我還沒有嘗試過任何東西。我對.NET很陌生,所以除了在文檔中打探我不知道從哪裏開始。我唯一的想法是手工分析模式並提取相關部分。然後,我會根據限制檢查數據並報告任何錯誤,但這看起來像確切的驗證器會爲我做的。 –

+0

你看過[XmlSchema類](http://msdn.microsoft.com/en-us/library/system.xml.schema.xmlschema.aspx)嗎? –

回答

1

事實證明,這比我預期的要容易得多。解決方案是創建一個新的模式,其中包含我想驗證的一個元素作爲其根。一旦這個模式被添加到模式集,您可以像對待任何完整的文檔一樣簡單地驗證片段。

3

我不知道從C#做到這一點,但它很容易在XQuery或XSLT 2.0中完成。在XSLT 2.0是:

<xsl:copy-of select="doc('doc.xml')//selected/element" validation="strict"/> 

和XQuery的是

validate strict {doc('doc.xml')//selected/element} 

所有你需要的是一個模式感知的XQuery或XSLT,在您選擇的環境中運行2.0處理器。

+0

謝謝。不幸的是,就我所知,這些都不在.NET中。 –

+0

在.NET環境中運行了許多XQuery和XSLT 2.0處理器,例如Saxon和XQSharp--當然,它們都不是微軟公司的產品。 –