C# 如何从xml模式验证c中获取xpath和数据值#
根据我们的要求,我需要捕获每个模式验证问题(错误和警告)的xpath和数据值。以下是我的代码-如何获取当前节点的xpath和xml中的无效数据值(如果可能的话)以及行号和数据位置的任何帮助C# 如何从xml模式验证c中获取xpath和数据值#,c#,xml,xpath,xsd,C#,Xml,Xpath,Xsd,根据我们的要求,我需要捕获每个模式验证问题(错误和警告)的xpath和数据值。以下是我的代码-如何获取当前节点的xpath和xml中的无效数据值(如果可能的话)以及行号和数据位置的任何帮助 XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.Schemas.Add("http://www.example.com\products", "Schema.xsd");
XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.Schemas.Add("http://www.example.com\products", "Schema.xsd");
readerSettings.ValidationType = ValidationType.Schema;
readerSettings.ValidationEventHandler += new ValidationEventHandler(readerSettings_ValidationEventHandler);
using (XmlReader xmlReader = XmlReader.Create(new StringReader(submissionXML), readerSettings))
{
while (xmlReader.Read()) { }
}
void readerSettings_ValidationEventHandler(object sender, ValidationEventArgs e)
{
XmlReader reader = ((XmlReader)sender);
//can I get xpath and data value from the reader
//I can get the element name
if (e.Severity == XmlSeverityType.Warning)
{
Console.Write("WARNING: ");
Console.WriteLine(e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
Console.Write("ERROR: ");
Console.WriteLine(e.Exception.LineNumber.ToString() +"-"+ e.Exception.LinePosition.ToString() +"-"+ e.Message);
}
}
尝试:
通过使用
XmlReader
类,您无法直接访问元素的XPath表达式
您可以在代码中开箱即用的是的
LineNumber
和LinePosition
属性。s是否有其他执行模式验证的方法(xmlreader除外),以便获得xpath和数据值?您可以在阅读XML文档时尝试自己构建xpath,通过在读取开始元素时将当前元素的名称等添加到堆栈中,并在读取结束元素时将其弹出。请参阅
XmlDocument xdoc = XmlDocument.Load(reader);
var nav = xdoc.CreateNavigator();
XPathNodeIterator navReader = nav.Select("Insert Xpath here");
while (navReader.MoveNext())
{
var value = navReader.Current.Select("Insert Xpath for Value here");
}