C# 处理由重复读取架构引起的错误
如果xml文档没有对xml模式的引用,那么一切都可以正常工作C# 处理由重复读取架构引起的错误,c#,xml,validation,xsd,C#,Xml,Validation,Xsd,如果xml文档没有对xml模式的引用,那么一切都可以正常工作 <Application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.companyname.com/blabla" xmlns="http://www.companyname.com/blabla"> 如何避免此错误?最简单的解决方案是:使
<Application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.companyname.com/blabla"
xmlns="http://www.companyname.com/blabla">
如何避免此错误?最简单的解决方案是:使用选项调用模式处理器,这些选项告诉它在调用时读取指定的模式文档,并忽略正在验证的输入中的xsi:schemaLocation提示。(如果您的模式验证器没有此类选项,请获取新的模式验证器。)
第一个示例中的伪xsi:schemaLocation应该是固定的,与验证选项无关。我刚刚删除了以下标志:
XmlSchemaValidationFlags.ProcessSchemaLocation
XmlReaderSettings xrs = new XmlReaderSettings();
xrs.ValidationType = ValidationType.Schema;
xrs.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
xrs.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
xrs.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
//xsd is located (intalled) in this same location where myapp.exe is.
string startLoc = System.Reflection.Assembly.GetExecutingAssembly().Location;
string xsd = Path.Combine(Path.GetDirectoryName(startLoc), "myschema.xsd");
using (Stream schemaStr = new FileStream(xsd, FileMode.Open))
{
XmlSchema s = XmlSchema.Read(schemaStr, null);
xrs.Schemas.Add(s);
}
xrs.Schemas.Compile();
using (XmlReader r = XmlReader.Create(xmlPath, xrs))
{
while (r.Read()){}
r.Close();
}
XmlSchemaValidationFlags.ProcessSchemaLocation