Генерировать классы с методом глубокого равенства из файла DTD

У меня есть файл DTD, описывающий XML-схему. Я хочу легко десериализовать XML-файл этой схемы в объект в C#. Мне также нужен этот объект, чтобы иметь метод, проверяющий равенство, которое работает для каждого элемента (т. Е. Глубокое равенство, а не ссылочное равенство)

Есть ли способ автоматически генерировать код из файла DTD, который соответствует структуре xml и который также имеет необходимые методы методов equals? Я знаю, что это автоматизировано, так как каждый из сгенерированных классов содержит только поля, которые являются либо примитивными типами, массивами примитивных типов или другими сгенерированными классами. Так что метод Equals написать просто.

Что я сделал до сих пор: 1. Создайте файл xsd из файла dtd с помощью Visual Studio. 2. Запустите xsd.exe, чтобы создать классы из файла xsd. Теперь сериализация довольно проста.

Но, к сожалению, сгенерированные классы не содержат никаких методов.


Вот пример небольшого xml, схемы xsd и сгенерированного кода:

XML:

<myXML attr="2">
    <bar/>
    <foo a="2">
        <b/>
    </foo>
</myXML>

XSD:

<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="myXML">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="bar" />
        <xs:element name="foo">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="b" />
            </xs:sequence>
            <xs:attribute name="a" type="xs:unsignedByte" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="attr" type="xs:unsignedByte" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>

XSD-сгенерированный код:

//------------------------------------------------------------------------------
// <auto-generated>
//     Dieser Code wurde von einem Tool generiert.
//     Laufzeitversion:4.0.30319.42000
//
//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
//     der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------

using System.Xml.Serialization;

// 
// Dieser Quellcode wurde automatisch generiert von xsd, Version=4.6.1055.0.
// 


/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class myXML {

    private object barField;

    private myXMLFoo fooField;

    private byte attrField;

    /// <remarks/>
    public object bar {
        get {
            return this.barField;
        }
        set {
            this.barField = value;
        }
    }

    /// <remarks/>
    public myXMLFoo foo {
        get {
            return this.fooField;
        }
        set {
            this.fooField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public byte attr {
        get {
            return this.attrField;
        }
        set {
            this.attrField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class myXMLFoo {

    private object bField;

    private byte aField;

    /// <remarks/>
    public object b {
        get {
            return this.bField;
        }
        set {
            this.bField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public byte a {
        get {
            return this.aField;
        }
        set {
            this.aField = value;
        }
    }
}

0 ответов

Другие вопросы по тегам