buc*_*ndb 7 c# xml xsd linq-to-xml xmlschemaset
我正在尝试使用Xml Schema和XDocument.Validate扩展方法验证Xml片段.每当使用无效的Xml片段时,ValidationEventHandler都会正确触发,但XmlSchemaValidationException的LineNumber和LinePosition属性都为0.
private bool Validate(XDocument doc)
{
bool isValid = true;
List<string> validationErrors = new List<string>();
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(null, "MyCustomSchema.xsd");
doc.Validate(schemas, (sender, args) =>
{
validationErrors.Add(String.Format("{0}: {1} [Ln {2} Col {3}]",
args.Severity,
args.Exception.Message,
args.Exception.LineNumber,
args.Exception.LinePosition));
isValid = false;
}, false);
return isValid;
}
Run Code Online (Sandbox Code Playgroud)
我在上面的示例中的目标是使用validationErrors通知用户验证失败的原因.但是,使用此方法时,LineNumber和LinePosition都为0.
该片段似乎很简单,并且在验证有效和无效的Xml片段方面似乎按预期工作.
提前致谢!
您不再验证Xml的文本表示形式,而是验证对象模型.因此,没有行和位置,因为内存中没有文件,但XElement,XAttribute等对象.另一个有用的提示是问自己 - 如果在加载XDocument之后但在运行验证之前修改了(例如添加了元素),应该返回什么行和位置?如果您没有创建或修改Xml,最快的方法是使用XmlReader来验证您的Xml文档.作为奖励 - 如果输入是文件或流 - 您应该在验证错误的情况下获得行和位置信息.
| 归档时间: |
|
| 查看次数: |
3888 次 |
| 最近记录: |