3

可変構造のXMLファイルを脱滅菌する必要があります。2つの例:

<xml>
    <OrgUnit GUID="1111">
        <OrgUnit GUID="2222">
            <OrgUnit GUID="3333" />
            <OrgUnit GUID="4444" />
            ...
        </OrgUnit>
    </OrgUnit>
</xml>

<xml>
    <OrgUnit GUID="1111" />
    <OrgUnit GUID="2222" />
    <OrgUnit GUID="3333">
        <OrgUnit GUID="4444" />
        <OrgUnit GUID="5555" />
    </OrgUnit>
</xml>

...

ご覧のとおり、要素名は常に同じです。問題は、要素のネストが常に変化することです。XmlSerializerでこれを実装する方法はありますか?

4

2 に答える 2

3
public class xml
{
    [XmlElement("OrgUnit")]
    public OrgUnit[] OrgUnits { get; set; }
}

public class OrgUnit
{
    [XmlAttribute]
    public int GUID { get; set; }

    [XmlElement("OrgUnit")]
    public OrgUnit[] OrgUnits { get; set; }
}

その後:

class Program
{
    static void Main()
    {
        var serializer = new XmlSerializer(typeof(xml));
        using (var reader = XmlReader.Create("test.xml"))
        {
            var result = (xml)serializer.Deserialize(reader);
        }
    }
}

のネストの深さで動作しますOrgUnit

于 2012-07-20T11:40:09.933 に答える
0

ドキュメントを出発点として使用する場合、ファイルと解析コードの間のコントラクトとしてxmlを常に好みます。xsd「OrgUnits」をルート ノードとして使用したことに注意してください。

を使用xsd.exeして、シリアライズ可能なクラスを作成できます。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="OrgUnits">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="OrgUnit"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="OrgUnit">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="OrgUnit"/>
      </xs:sequence>
      <xs:attribute name="GUID" use="required" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
</xs:schema>
于 2012-07-20T11:40:58.687 に答える