这些XML验证方法有什么区别?

时间:2011-04-16 10:03:30

标签: .net xsd xml-validation

我尝试针对XSD验证XML。我发现了几种方法。这两个可以很好地编写所有错误,所以每个错误的用途是什么?

XmlDocument和XmlSchema类

XmlDocument document = new XmlDocument();
document.Load(xmlFilePath);    
document.Schemas.Add(@namespace,schemaFilePath);
document.Validate(ValidationHandler);
-----    
public void ValidationHandler(object sender, ValidationEventArgs e)
{
  Console.WriteLine(e.Message);
}

XmlReaderSettings类

在这里,我可以进行一些设置,并且在执行Load()时就会进行验证。

XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationEventHandler += new ValidationEventHandler(ValidationHandler);
settings.Schemas.Add(@namespace, schemaFilePath));
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(xmlFilePath, settings);
document.Load(reader);
reader.Close();
-----
public void ValidationHandler(object sender, ValidationEventArgs e)
{
  Console.WriteLine(e.Message);
}

1 个答案:

答案 0 :(得分:2)

区别在XmlReaderXmlDocument类之间。 XmlReader流式传输XML并一次读取一个节点。另一方面,XmlDocument将整个XML读入内存并使用它。因此,通常XmlDocument更容易使用,但不适合大文件。

就验证而言,似乎类是可比较的,因此要么选择更容易使用的类(可能是XmlDocument),要么选择XmlReader如果您期望大文件或如果低内存消耗很重要。

另外,要使用XmlReader进行验证,您不需要像XmlDocument.Load()那样使用while (reader.Read()) { }就足够了。