XML元素和数组

本文关键字:数组 元素 XML | 更新日期: 2023-09-27 18:17:43

我正在尝试与发送以下两条消息的硬件进行通信。在接收消息时,不知道我得到的是两种消息结构中的哪一种。使用XSD,我取了.xml并分别为每个文件创建了. XSD和c#文件,但这在最终解决方案中是不实际的,因为我不知道我将拥有的消息。开发人员似乎在第一个实例中使用了'ParameterValue'作为数组,第二个实例使用了一个简单的字符串。是否有可能有一段代码将"反序列化"这两个消息?如果我在第二条消息上使用第一条消息的代码,则ParameterValue字段是一个空数组。

= =第一条信息= =

<Parameters>
  <Parameter>
    <ParameterName>ResponseCode</ParameterName>
    <ParameterValue>2</ParameterValue>
  </Parameter>
  <Parameter>
    <ParameterName>ResponseValue</ParameterName>
    <ParameterValue>
      <ReturnParameters>
        <ReturnParameter>
          <ParameterName>Data1</ParameterName>
          <ParameterValue>Parameter Not Found</ParameterValue>
        </ReturnParameter>
        <ReturnParameter>
          <ParameterName>Data2</ParameterName>
          <ParameterValue>Parameter Not Found</ParameterValue>
        </ReturnParameter>
      </ReturnParameters>
    </ParameterValue>
  </Parameter>
</Parameters>

= = = =第二条

<Parameters>
  <Parameter>
    <ParameterName>ResponseCode</ParameterName>
    <ParameterValue>2</ParameterValue>
  </Parameter>
  <Parameter>
    <ParameterName>ResponseValue</ParameterName>
    <ParameterValue>Success</ParameterValue>
  </Parameter>
</Parameters>

XML元素和数组

mixed="true"添加到XSD中。这表示您希望将XML元素与文本结合起来。这将导致c#类中出现Text字段。

http://www.w3schools.com/schema/schema_complex_mixed.asp

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Parameters" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Parameters" msdata:IsDataSet="true" msdata:Locale="en-US">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Parameter">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ParameterName" type="xs:string" minOccurs="0" />
              <xs:element name="ParameterValue" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType mixed="true">
                  <xs:sequence>
                    <xs:element name="ReturnParameters" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="ReturnParameter" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="ParameterName" type="xs:string" minOccurs="0" />
                                <xs:element name="ParameterValue" type="xs:string" minOccurs="0" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

,

public partial class ParametersParameterParameterValue {
    [System.Xml.Serialization.XmlArrayAttribute(
        Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    [System.Xml.Serialization.XmlArrayItemAttribute(
        "ReturnParameter", 
        typeof(ParametersParameterParameterValueReturnParametersReturnParameter), 
        Form=System.Xml.Schema.XmlSchemaForm.Unqualified, 
        IsNullable=false)]
    public ParametersParameterParameterValueReturnParametersReturnParameter[][] 
        ReturnParameters { get; set; }
    [System.Xml.Serialization.XmlTextAttribute()]
    public string[] Text { get; set; }
}