这类似于这个问题C#在验证xml时获取模式信息
但是,我正在使用XDocument进行LINQ.
我正在读取/解析一组CSV文件并转换为XML,然后根据XSD架构验证XML.
我想捕获与元素值相关的特定错误,生成更加用户友好的消息,并将它们返回给用户,以便可以更正输入数据.我想在输出数据中包含的项目之一是一些架构信息(例如数字类型的可接受值的范围).
在我目前的方法中(我愿意改变),我能够捕获除了架构信息之外我需要的一切.
我已经尝试访问Validation事件处理程序SourceSchemaObject的ValidationEventArgs参数,但它始终为null.我也试过过GetSchemaInfoXElement,看起来也是null.
我正在使用RegEx来识别我想要捕获的特定验证错误,并通过验证事件处理程序的sender参数从XElement中获取数据.我曾想过将模式转换为XDocument并通过LINQ获取我需要的东西,但在我看来应该有更好的选择
这是我目前的验证方法:
private List<String> this.validationWarnings;
private XDocument xDoc;
private XmlSchemaSet schemas = new XmlSchemaSet();
public List<String> Validate()
{
this.validationWarnings = new List<String>();
// the schema is read elsewhere and added to the schema set
this.xDoc.Validate(this.schemas, new ValidationEventHandler(ValidationCallBack), true);
return validationWarnings
}
Run Code Online (Sandbox Code Playgroud)
这是我的回调方法:
private void ValidationCallBack(object sender, ValidationEventArgs args)
{
var element = sender as XElement;
if (element != null)
{
// this is a just a placeholder …Run Code Online (Sandbox Code Playgroud) 鉴于以下情况
(其中行号和列号代表节点的“<”字符)
使用 XDocument API 如何找到该位置的 XNode。