2011-07-21 187 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--当然,它们都不是微软公司的产品。 –