Я исправляю предупреждения в своей программе, и, очевидно, xmlvalidating reader и xmlschemacollection устарели. Проблема в том, что я не совсем уверен, как. Вот попытка «подражать» предыдущей проверочной функции с новой, включающей xmlschemaset и xmlreader.create. Сначала я объявляю схему и устанавливаю ее с помощью строки targeturi, затем добавляю ее в набор схем при настройке обработчика события проверки. Я думаю, что моя проблема заключается в настройке читателей и входных потоков. Я знал, как это сделать с помощью xmlvalidating reader, но это не вариант, если я хочу исправить эти предупреждения. Вот код и попытка. Во время тестирования использовался только новый проверочный код xml, старый был закомментирован.
// New Validation Xml.
string xsd_file = filename.Substring(0, filename.Length - 3) + "xsd";
XmlSchema xsd = new XmlSchema();
xsd.SourceUri = xsd_file;
XmlSchemaSet ss = new XmlSchemaSet();
ss.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
ss.Add(xsd);
if (ss.Count > 0)
{
XmlTextReader r = new XmlTextReader(filename2);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(ss);
settings.ValidationEventHandler +=new ValidationEventHandler(ValidationCallBack);
XmlReader reader = XmlReader.Create(filename2, settings);
while (reader.Read())
{
}
reader.Close();
}
// Old Validate XML
XmlSchemaCollection sc = new XmlSchemaCollection();
sc.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
sc.Add(null, xsd_file);
if (sc.Count > 0)
{
XmlTextReader r = new XmlTextReader(filename2);
XmlValidatingReader v = new XmlValidatingReader(r);
v.ValidationType = ValidationType.Schema;
v.Schemas.Add(sc);
v.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
while (v.Read())
{
}
v.Close();
}
private void ValidationCallBack(object sender, ValidationEventArgs e)
{
// If Document Validation Fails
isvalid = false;
MessageConsole.Text = "INVALID. Check message and datagridview table.";
richTextBox1.Text = "The document is invalid: " + e.Message;
}
К сожалению, когда я запускаю программу и пытаюсь проверить недопустимый XML-документ, он выдает мне такую ошибку: «Элемент« URNLookup »не объявлен». Элемент URNLookup является корневым элементом файла xml. Я всегда могу вернуться к старому методу проверки, но эти предупреждения меня пугают.
Любая помощь очень ценится. Заранее спасибо! Я буду рад предоставить дополнительную информацию, если я что-то пропустил.
- tf.rz (.NET 3.5 SP1, Visual Studio C # 2008)