如何解决如何针对嵌入式XSD验证XML文档?
我正在编写一个XML验证程序,但是在我读过的任何地方,都只有示例,您必须在其中选择“ name.xsd”架构位置和目标位置。 我希望该程序自动在XML中找到该位置。 我需要编写自我程序还是必须编写Xml阅读器程序,该程序将一直读取直到在“ schemalocation”标记中找到XML中的.xsd位置为止?这是我的代码。
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
using System.IO;
class XPathValidation
{
static void Main()
{
XmlTextReader reader = new XmlTextReader(@"C:\Users\grish\Desktop\Correct Xml.xml");
XmlDocument doc = new XmlDocument();
doc.Load(reader);
reader.Close();
XmlElement root = doc.DocumentElement;
XmlNode schemaLocationAttribute = root.SelectSingleNode("//@*[local-name()='schemaLocation']");
string[] components = schemaLocationAttribute.Value.Split(null);
//----------------------------------
bool validated = false;
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(components[2],components[3]);
settings.ValidationType = ValidationType.Schema;
XmlReader reader1 = XmlReader.Create(@"C:\Users\grish\Desktop\Correct Xml.xml",settings);
XmlDocument document = new XmlDocument();
document.Load(reader1);
ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);
// the following call to Validate succeeds.
document.Validate(eventHandler);
validated = true;
// Parse the file.
while (reader1.Read());
Console.WriteLine("Everything is okay!!");
}
catch (XmlException e)
{
// load or parse error in the XML
Console.WriteLine(e.Message);
validated = false;
}
catch (XmlSchemaValidationException e)
{
// Validation failure in XML
Console.WriteLine(e.Message);
validated = false;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
validated = false;
}
}
static void ValidationEventHandler(object sender,ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Error: {0}",e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Warning {0}",e.Message);
break;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。