我已经在互联网上搜索了 24 小时,但找不到有效的解决方案。
我有一个包含导入行的架构文件:
<xsd:import namespace="http://www.w3.org/2000/09/xmldsig#"
schemaLocation=
"http://www.w3.org/TR/2001/PR-xmldsig-core-20010820/xmldsig-core-schema.xsd"/>
这是我验证 Xml 的代码:
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(null, @"C:\TEMP\myschema.xsd");
XmlReader xmlReader = XmlReader.Create(new StringReader(document.InnerXml), settings);
while (xmlReader.Read()) { }
当我运行它时,我得到:The 'http://www.w3.org/2000/09/xmldsig#:Signature' element is not declared.
如果我将我的代码(如搜索所建议的那样)更改为:
settings.ValidationType = ValidationType.DTD;
settings.DtdProcessing = DtdProcessing.Parse;
然后我没有收到错误,但验证不起作用,因为我故意插入了一个无效值来测试验证是否有效。
我尝试添加直接导入的架构:
settings.Schemas.Add(null, @"C:\TEMP\xmldsig-core-schema.xsd");
但收到错误:For security reasons DTD is prohibited in this XML document. To enable DTD processing...
我已经尝试了我能想到的所有 XmlReaderSettings 设置组合,并且这些设置已通过搜索得到建议。
我现在真的很困惑。