【问题标题】:How to get xpath and data value from xml schema validation c#如何从 xml 模式验证 c# 中获取 xpath 和数据值
【发布时间】:2015-01-10 04:17:23
【问题描述】:

根据我们的要求,我需要为每个模式验证问题(错误和警告)捕获 xpath 和数据值。以下是我的代码 - 任何帮助如何获取当前节点的 xpath 和 xml 中的无效数据值,如果可能的话,行号和数据位置。

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);
                }
            }

【问题讨论】:

标签: c# xml xpath xsd


【解决方案1】:

通过使用XmlReader 类,您无法直接访问元素的 XPath 表达式。

您可以为您的代码开箱即用的是XmlSchemaExceptionLineNumberLinePosition 属性。

【讨论】:

  • 还有其他方法可以执行模式验证(xmlreader 除外)以便我可以获取 xpath 和数据值吗?
  • 您可以尝试在阅读 XML 文档时自己构建 XPath,方法是在读取起始元素时将当前元素的名称等添加到堆栈中,并在读取结束元素。
【解决方案2】:

尝试:

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");
}

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 2021-11-27
    • 2013-05-22
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多