Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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
C# 如何使用单个complexType元素在代码中创建xmlSchema?_C#_Xml_Validation_Serialization_Xsd - Fatal编程技术网

C# 如何使用单个complexType元素在代码中创建xmlSchema?

C# 如何使用单个complexType元素在代码中创建xmlSchema?,c#,xml,validation,serialization,xsd,C#,Xml,Validation,Serialization,Xsd,在将XML传递到后端系统之前,我需要将其包装在元素标记中 原始的、未包装的XML元素根据其XSD文件进行验证。 当然,包好的那一个没有 在验证XML之前,如何在代码中创建XmlSchema,并将其交给我的XmlSchemaSet 这是未包装的xml,用于验证: <ns0:Request xmlns:ns0="example.com/Service.xsd" xmlns:ns1="example.com/Data.xsd" xmlns:

在将XML传递到后端系统之前,我需要将其包装在元素标记中

原始的、未包装的XML元素根据其XSD文件进行验证。 当然,包好的那一个没有

在验证XML之前,如何在代码中创建
XmlSchema
,并将其交给我的
XmlSchemaSet

这是未包装的xml,用于验证:

<ns0:Request xmlns:ns0="example.com/Service.xsd" 
             xmlns:ns1="example.com/Data.xsd" 
             xmlns:ns2="example.com/RequestSchema.xsd">
    <ns0:Info>
        <ns2:Id>12345</ns2:BpId>
        <ns2:Name>FOO</ns2:BpName>
        <ns2:Init>BAR</ns2:Initiator>
    </ns0:Info>
    <ns1:DATA>          
    </ns1:DATA>
</ns0:Request>
我在验证时遇到此错误:

找不到元素“组”的架构信息


发生这种情况的原因有很多:

  • 架构位置可能不正确,并且声明
    元素的文件不在其中
  • 声明生成不正确
  • 在错误的命名空间中
  • 在错误的上下文中,等等
  • 假设您的其他文件正在正确验证,正如您在问题中所说,这是您需要生成的XSD(假设
    Service.XSD
    位于同一目录中):

    你应使用:

    var groupImport = new XmlSchemaImport { 
        Namespace = "example.com/Service.xsd",
        SchemaLocation = "Service.xsd"
    };
    
    2) 空序列:您正在生成一个新的模式,该模式导入所有其他模式,创建一个包含序列的新复杂类型,但您没有向序列添加任何内容。这就是您正在生成的内容:

    <xs:element name="group">
        <xs:complexType>
          <xs:sequence/>
        </xs:complexType>
      </xs:element>
    
    为此,您需要访问
    序列
    对象,并按如下方式重写代码:

    XmlSchemaSequence sequence = new XmlSchemaSequence();
    var groupComplexType = new XmlSchemaComplexType
    {
        Particle = sequence,
    };
    
    然后创建一个具有限定名称的元素引用声明,并将其添加到序列中

    XmlSchemaElement requestRef = new XmlSchemaElement();
    requestRef.RefName = new XmlQualifiedName("ns0:Request");
    sequence.Items.Add(requestRef);
    
    您还必须将该前缀和命名空间声明添加到架构中,以便它能够验证您的限定类型:

    xmlSchema.Namespaces.Add("ns0", "example.com/Service.xsd");
    
    这可能是您问题中的一个输入错误,但是
    xs
    名称空间应该以“not”example.com开头:

    通过这些更改,您应该能够生成一个模式来验证您的文件

    以下是根据以下建议修改的代码:

    var groupImport = new XmlSchemaImport { 
        Namespace = "example.com/Service.xsd",
        SchemaLocation = "Service.xsd"
    };
    
    XmlSchemaSequence sequence = new XmlSchemaSequence();
    var groupComplexType = new XmlSchemaComplexType
    {
        Particle = sequence,
    };
    
    var groupElement = new XmlSchemaElement
    {
        Name = "group",
        SchemaType = groupComplexType
    };
    
    XmlSchemaElement requestRef = new XmlSchemaElement();
    requestRef.RefName = new XmlQualifiedName("ns0:Request");
    sequence.Items.Add(requestRef);
    
    var xmlSchema = new XmlSchema { TargetNamespace = "example.com/group.xsd" };
    xmlSchema.Namespaces.Add("xs", "http://www.w3.org/2001/XMLSchema");
    xmlSchema.Namespaces.Add("ns0", "example.com/Service.xsd");
    xmlSchema.Includes.Add(groupImport);
    xmlSchema.Items.Add(groupElement);
    
    var xmlSchemaSet = new XmlSchemaSet();
    xmlSchemaSet.Add(xmlSchema);
    xmlSchemaSet.Add(null, "Service.xsd");
    xmlSchemaSet.Add(null, "Data.xsd");
    xmlSchemaSet.Add(null, "RequestSchema.xsd");
    
    <xs:element name="group">
        <xs:complexType>
          <xs:sequence/>
        </xs:complexType>
      </xs:element>
    
    <xs:sequence>
        <xs:element ref="ns0:Request" />
    </xs:sequence>
    
    XmlSchemaSequence sequence = new XmlSchemaSequence();
    var groupComplexType = new XmlSchemaComplexType
    {
        Particle = sequence,
    };
    
    XmlSchemaElement requestRef = new XmlSchemaElement();
    requestRef.RefName = new XmlQualifiedName("ns0:Request");
    sequence.Items.Add(requestRef);
    
    xmlSchema.Namespaces.Add("ns0", "example.com/Service.xsd");
    
    xmlSchema.Namespaces.Add("xs", "http://www.w3.org/2001/XMLSchema");
    
    var groupImport = new XmlSchemaImport { 
        Namespace = "example.com/Service.xsd",
        SchemaLocation = "Service.xsd"
    };
    
    XmlSchemaSequence sequence = new XmlSchemaSequence();
    var groupComplexType = new XmlSchemaComplexType
    {
        Particle = sequence,
    };
    
    var groupElement = new XmlSchemaElement
    {
        Name = "group",
        SchemaType = groupComplexType
    };
    
    XmlSchemaElement requestRef = new XmlSchemaElement();
    requestRef.RefName = new XmlQualifiedName("ns0:Request");
    sequence.Items.Add(requestRef);
    
    var xmlSchema = new XmlSchema { TargetNamespace = "example.com/group.xsd" };
    xmlSchema.Namespaces.Add("xs", "http://www.w3.org/2001/XMLSchema");
    xmlSchema.Namespaces.Add("ns0", "example.com/Service.xsd");
    xmlSchema.Includes.Add(groupImport);
    xmlSchema.Items.Add(groupElement);
    
    var xmlSchemaSet = new XmlSchemaSet();
    xmlSchemaSet.Add(xmlSchema);
    xmlSchemaSet.Add(null, "Service.xsd");
    xmlSchemaSet.Add(null, "Data.xsd");
    xmlSchemaSet.Add(null, "RequestSchema.xsd");