C# Xml架构验证未找到验证错误
我试图根据Xml文件的模式验证它。 这是我的代码:C# Xml架构验证未找到验证错误,c#,xml,c#-3.0,xsd,xml-parsing,C#,Xml,C# 3.0,Xsd,Xml Parsing,我试图根据Xml文件的模式验证它。 这是我的代码: private readonly List<string> validationErrors = new List<string>(); public bool TryValidate(string xml, string schemaLocation, ref List<string> errors) { var document = new XmlDocu
private readonly List<string> validationErrors = new List<string>();
public bool TryValidate(string xml, string schemaLocation, ref List<string> errors)
{
var document = new XmlDocument();
document.LoadXml(xml);
var schemaReader = new XmlTextReader(schemaLocation);
var settings = new XmlReaderSettings {CloseInput = true};
settings.ValidationEventHandler += Handler;
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(null, schemaReader);
var stringReader = new StringReader(xml);
using (var validatingReader = XmlReader.Create(stringReader, settings))
{
while (validatingReader.Read())
{
}
}
errors = validationErrors;
return errors.Count == 0;
}
private const string Format = "Line: {0}, Position: {1} \"{2}\"";
private void Handler(object sender, ValidationEventArgs e)
{
if (e.Severity != XmlSeverityType.Error)
{
return;
}
validationErrors.Add(string.Format(Format,
e.Exception.LineNumber,
e.Exception.LinePosition,
e.Exception.Message));
}
private readonly List validationErrors=new List();
public bool TryValidate(字符串xml、字符串模式位置、引用列表错误)
{
var document=新的XmlDocument();
LoadXml(xml);
var schemaReader=新的XmlTextReader(schemaLocation);
var设置=新的XmlReaderSettings{CloseInput=true};
settings.ValidationEventHandler+=处理程序;
settings.ValidationType=ValidationType.Schema;
settings.Schemas.Add(null,schemaAreder);
var stringReader=新的stringReader(xml);
使用(var validatingReader=XmlReader.Create(stringReader,设置))
{
while(validatingReader.Read())
{
}
}
错误=验证错误;
返回错误。计数==0;
}
private const string Format=“行:{0},位置:{1}\”{2}\”;
私有无效处理程序(对象发送方、ValidationEventArgs e)
{
如果(例如严重性!=XmlSeverityType.Error)
{
回来
}
validationErrors.Add(string.Format(Format,
e、 例外。行号,
e、 例外。行位置,
e、 例外情况(信息));
}
架构对BusinessType元素有以下限制:
<xs:element name="BusinessType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="15"/>
<xs:enumeration value="not specified"/>
<xs:enumeration value="Sole trader"/>
<xs:enumeration value="Partnership"/>
<xs:enumeration value="Limited company"/>
</xs:restriction>
</xs:simpleType>
<xs:element>
但实际的Xml实例文件包含一个零元素:
<BusinessType>0</BusinessType>
0
然而,当我运行验证代码时,它通过了模式验证(即没有发现错误)?
编辑-作为一个测试,我还完全重命名了其中一个元素,但它仍然没有生成错误
有人知道为什么会这样吗
非常感谢我尝试了您的示例代码并得到了预期的结果:“BusinessType”元素无效-值“0”根据其数据类型“String”无效-枚举约束失败。“是否验证了与预期不同的Xml文档?嗨,Filburt,我刚刚发现,如果xml实例文件的根元素中有一个xmlns:ns1=“”>。验证再次开始工作!