使用以下MSDN文档,我针对架构验证XML文件:http://msdn.microsoft.com/en-us/library/8f0h7att%28v=vs.100%29.aspx
只要XML包含对架构位置或内联架构的引用,这就可以正常工作。是否可以将模式“硬编码”嵌入到应用程序中,即XSD不会作为文件驻留,因此XML不需要引用它?
我说的是:
答案 0 :(得分:3)
试试这个:
Stream objStream = objFile.PostedFile.InputStream;
// Open XML file
XmlTextReader xtrFile = new XmlTextReader(objStream);
// Create validator
XmlValidatingReader xvrValidator = new XmlValidatingReader(xtrFile);
xvrValidator.ValidationType = ValidationType.Schema;
// Add XSD to validator
XmlSchemaCollection xscSchema = new XmlSchemaCollection();
xscSchema.Add("xxxxx", Server.MapPath(@"/zzz/XSD/yyyyy.xsd"));
xvrValidator.Schemas.Add(xscSchema);
try
{
while (xvrValidator.Read())
{
}
}
catch (Exception ex)
{
// Error on validation
}
答案 1 :(得分:1)
您可以使用XmlReaderSettings.Schemas属性指定要使用的架构。可以从Stream加载模式。
var schemaSet = new XmlSchemaSet();
schemaSet.Add("http://www.contoso.com/books", new XmlTextReader(xsdStream));
var settings = new XmlReaderSettings();
settings.Schemas = schemaSet;
using (var reader = XmlReader.Create(xmlStream, settings))
{
while (reader.Read());
}
答案 2 :(得分:0)
您可以将XSD声明为嵌入式资源,并通过GetManifestResourceStream加载它,如本文所述:How to read embedded resource text file
答案 3 :(得分:0)
是的,这是可能的。将嵌入式资源文件读取到string
,然后创建XmlSchemaSet
对象,为其添加架构。验证时在XmlReaderSettings
中使用它。