Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 故障解决位置在<;xs:import>;C中的元素#_Xml_Validation_Import_Schema_Document - Fatal编程技术网

Xml 故障解决位置在<;xs:import>;C中的元素#

Xml 故障解决位置在<;xs:import>;C中的元素#,xml,validation,import,schema,document,Xml,Validation,Import,Schema,Document,我使用一个XML模式文档来验证传入的数据文档,但是该模式在运行时的编译过程中似乎失败了,因为它引用了一个复杂类型,它是外部模式的一部分。外部架构在文档顶部的元素中指定。我原以为这可能是访问问题,所以我将外部文档的一个副本移到了localhost文件夹中。我得到了同样的错误,所以现在我想知道元素的使用是否会有某种问题 架构文档片段如下所示: <xs:schema targetNamespace="http://www.smpte-ra.org/schemas/429-7/2006/CPL"

我使用一个XML模式文档来验证传入的数据文档,但是该模式在运行时的编译过程中似乎失败了,因为它引用了一个复杂类型,它是外部模式的一部分。外部架构在文档顶部的
元素中指定。我原以为这可能是访问问题,所以我将外部文档的一个副本移到了localhost文件夹中。我得到了同样的错误,所以现在我想知道
元素的使用是否会有某种问题

架构文档片段如下所示:

<xs:schema targetNamespace="http://www.smpte-ra.org/schemas/429-7/2006/CPL" xmlns:cpl="http://www.smpte-ra.org/schemas/429-7/2006/CPL" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
...  
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://localhost/TMSWebServices/XMLSchema/xmldsig-core-schema.xsd"/>
...
<xs:element name="Signer" type="ds:KeyInfoType" minOccurs="0"/>
...
</xs:schema>
在while循环之前实例化XMLReader对象的那一行之前,一切都进展顺利。然后它会失败,并出现类型未声明的错误。它试图查找的类型KeyInfoType是在import元素中的一个文档中定义的。我已确保名称空间对齐。我想知道名称空间定义中的#符号是否导致了问题,但删除它们没有任何效果,它只是改变了错误的外观(即未声明“类型“”。”与未声明“类型“”。)


我怀疑在
元素的处理过程中我遗漏了一些东西。欢迎提出任何建议。谢谢

我认为您只需添加一行代码即可使其正常工作:

settings.ValidationFlags =  
      System.Xml.Schema.XmlSchemaValidationFlags.ProcessSchemaLocation;

马克

好吧,这有点令人困惑。我尝试了几种不同的方法,包括添加行:

settings.ValidationFlags |= System.Xml.Schema.XmlSchemaValidationFlags.ProcessSchemaLocation;
我不断地得到同样的错误:

Type 'http://www.w3.org/2000/09/xmldsig#:KeyInfoType' is not declared.
该命名空间指定的文档是:

http://localhost/TMSWebServices/XMLSchema/xmldsig-core-schema.xsd
文档可以从我所在的位置访问,我可以在第152行找到(似乎)有问题的KeyInfoType类型

只是为了好玩,我检查了正在验证的文档,发现这种模式中定义的元素不在文档中。模式将其定义为可选(minOccurs=“0”),因此这不是问题所在


当一个schmea文档导入外部模式文档时,框架编译该文档的能力似乎有些奇怪。有人见过这种行为吗?谷歌在解决这个问题上并没有取得任何成效,尽管它确实给了我一些建议让我尝试一下。谢谢

我试过那句话,但没有效果。我查看了ProcessSchemaLocation标志,发现我看到的示例使用了复合运算符(对我来说是新的):settings.ValidationFlags |=System.Xml.Schema.XmlSchemaValidationFlags.ProcessSchemaLocation;不幸的是,这也不起作用。我想我会继续努力的。谢谢
http://localhost/TMSWebServices/XMLSchema/xmldsig-core-schema.xsd