我已经根据XSD验证XML的代码
public void Validate()
{
XDocument xdoc = XDocument.Load("XML path");
var schemas = new XmlSchemaSet();
schemas.Add(null, "XSD path");
xdoc.Validate(schemas, ValidationCallBack);
}
private void ValidationCallBack(object sender, ValidationEventArgs args)
{
if (args.Severity != XmlSeverityType.Error)
return;
throw new XmlSchemaValidationException(args.Message);
}
如果我在xsd中有一个字符串类型的元素并且有模式([^ \ t \ r \ n] *) xml值标记是
<tagname> There is LF character here
</tagname>
它从验证传递但是标签值具有尾随&#39; LF&#39;仅限人物。 它应该如何无效并且在xml验证中失败? 请注意,我无法在xsd
中进行修改答案 0 :(得分:4)
这个问题有几个有趣的方面。
解析和验证XML文档是在技术堆栈中完成的,包括解码,解析,转换为XML信息集(信息集),以及验证XML模式。
在解析之前,XML规范说any CR characters are replaced with LF characters(如果显示为CR LF则删除),只留下LF字符。因此,解析器在某些极端情况下不会看到任何CR字符。
当转换为信息集时,文本元素之外出现的空白区域(包括LF)(这是我对&#34;尾随&#34;在问题中的理解:还有尾随空格的概念在属性中)被省略。因此,当构建文档的XML信息集时,there is no information left about trailing white space。
针对上述信息集执行XML模式验证,这意味着模式也不会看到任何尾随空格。
检查实例中的尾随CR或LF字符,即使它确实有意义,因此超出了Schema验证的范围,应该在XML处理阶段之前使用其他工具完成。