XML XSD架构验证失败并显示错误'未声明'http://www.xchanging.com/USM/xml:MyCode'元素。

时间:2018-01-24 07:54:11

标签: xml xsd xsd-validation

我有一个需要使用架构验证的xml。两者都在下面。 我定义了两个模式。

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<Jv-Ins-Reinsurance  
xmlns="http://www.ACORD.org/standards/Jv-Ins-Reinsurance/2008-1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lm="http://www.xchanging.com/USM/xml" xsi:schemaLocation="http://www.ACORD.org/standards/Jv-Ins-Reinsurance/2008-1 Jv-Ins-Reinsurance-2008-1.xsd"> 
<TechAccount> 
<Extension> 
<lm:MyCode>Test</lm:MyCode> 
</Extension> 
</TechAccount>
</Jv-Ins-Reinsurance>

要测试的架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:usm="http://www.xchanging.com/USM/xml" xmlns="http://www.ACORD.org/standards/Jv-Ins-Reinsurance/2008-1" targetNamespace="http://www.ACORD.org/standards/Jv-Ins-Reinsurance/2008-1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2008-1b">
<xs:import namespace="http://www.xchanging.com/USM/xml" schemaLocation="USM.xsd"/>

  <xs:element name="Jv-Ins-Reinsurance" type="Jv-Ins-ReinsuranceType"/>
  <xs:element name="TechAccount" type="TechAccountType"/>

  <xs:complexType name="Jv-Ins-ReinsuranceType">
    <xs:choice>
      <xs:element ref="TechAccount"/>
    </xs:choice>
   </xs:complexType>

     <xs:complexType name="TechAccountType">
    <xs:sequence>
    <xs:element name="Extension" type="TechAccount_ExtensionType" 
          minOccurs="0"/>
    </xs:sequence>
    </xs:complexType>

    <xs:complexType name="TechAccount_ExtensionType">
    <xs:sequence>
      <xs:element ref = "usm:MyCode" />
     </xs:sequence>
  </xs:complexType>
</xs:schema>

导入的架构是:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.xchanging.com/USM/xml" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.xchanging.com/USM/xml" elementFormDefault="unqualified">
 <xs:element name="MyCode" type="xs:string" />
</xs:schema>

我最终得到了错误: 未声明“http://www.xchanging.com/USM/xml:MyCode”元素。

我已尝试了多项内容,但这并没有得到解决。甚至链接上的示例:http://www.xfront.com/ZeroOneOrManyNamespaces.html也执行相同的操作。

1 个答案:

答案 0 :(得分:1)

我发现所有XML和XSD在NotePad ++中运行良好。 我编写了c#应用程序并且无法正常工作,后来我发现C#逻辑没有添加模式“http://www.xchanging.com/USM/xml”,这就是为什么无法在另一个模式中找到该元素的原因,这个模块由内存由notepad ++等工具完成。 谢谢Fabian https://stackoverflow.com/users/2898506/fabian进行调查。

这是我缺少的东西(在添加架构的前几行中)

 schemas.Add(null, XmlReader.Create(new StringReader(schema2)));

   schemas.Add(null, XmlReader.Create(new StringReader(schema3)));

   string message = string.Empty;

   doc = new XDocument(xml);

            doc.Validate(schemas, (o, e) =>
            {
                message = e.Message;
                isValidated = false;
            });

要知道我们需要在调用validate之前添加所有导入的模式,以便验证器获取所有内容的知识。我的坏:/