C# 如何使用单个complexType元素在代码中创建xmlSchema?
在将XML传递到后端系统之前,我需要将其包装在元素标记中 原始的、未包装的XML元素根据其XSD文件进行验证。 当然,包好的那一个没有 在验证XML之前,如何在代码中创建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:
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>
我在验证时遇到此错误:
找不到元素“组”的架构信息
发生这种情况的原因有很多:
组
元素的文件不在其中李>
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");