如何配置 XSD 架构以在嵌套元素上生成 xmlns 属性?

问题描述 投票:0回答:1

我创建了这个 XSD 文件并将其命名为 Envelope.xsd...

<w3:schema xmlns:w3="http://www.w3.org/2001/XMLSchema">
  <w3:element name="Envelope">
    <w3:complexType>
      <w3:sequence>
        <w3:element name="Unit">
          <w3:complexType>
            <w3:sequence>
              <w3:element name="EncryptedData">
                <w3:complexType>
                  <w3:sequence>
                    <w3:element name="KeyInfo">
                      <w3:complexType>
                        <w3:sequence>
                          <w3:element name="KeyName" type="w3:string" />
                        </w3:sequence>
                      </w3:complexType>
                    </w3:element>
                  </w3:sequence>
                </w3:complexType>
              </w3:element>
            </w3:sequence>
          </w3:complexType>
        </w3:element>
      </w3:sequence>
    </w3:complexType>
  </w3:element>
</w3:schema>

然后,我在 xsd.exe(Visual Studio 附带)中使用此命令来生成我的 C# 代码文件...

xsd.exe /c Envelope.xsd

然后,在我的代码中,我创建了一个名为

MyEnvelope
的新 Envelope 对象,并使用此代码对其进行序列化...

var serializer = new XmlSerializer(typeof(Envelope));
var namespaces = new XmlSerializerNamespaces();
namespaces.Add("", "");
var writer = new StringWriter();
serializer.Serialize(writer, MyEnvelope, namespaces);
var MyEnvelopeSerialized = writer.ToString();

这就是生成的序列化信封(即 MyEnvelopeSerialized)的样子...

<Envelope>
  <Unit>
    <EncryptedData>
      <KeyInfo>
        <KeyName>MyValue</KeyName>
      </KeyInfo>
    </EncryptedData>
  </Unit>
</Envelope>

现在是重要的部分。相反,我必须使输出看起来完全像这样......

<Envelope>
  <Unit>
    <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <KeyName>MyValue</KeyName>
      </KeyInfo>
    </EncryptedData>
  </Unit>
</Envelope>

如何修改 Envelope.xsd 文件,以便当 xsd.exe 解析它并生成 C# 代码文件时,XmlSerializer 会将“xmlns...”属性添加到

<EncryptedData>
<KeyInfo> 
标签?

xml xsd schema
1个回答
0
投票

请尝试以下 XSD。

XSD

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xmldsig="http://www.w3.org/2000/09/xmldsig#" xmlns:xmlenc="http://www.w3.org/2001/04/xmlenc#">
  <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig.xsd"/>
  <xs:import namespace="http://www.w3.org/2001/04/xmlenc#" schemaLocation="xmlenc.xsd"/>
  <xs:element name="Envelope">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Unit"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Unit">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="xmlenc:EncryptedData"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
© www.soinside.com 2019 - 2024. All rights reserved.