2017-04-04 1 views
0

Das Generieren von XSD-Dateien aus einer Klasse mithilfe von xds.exe (oder other methods) funktioniert gut, aber ich finde keine Möglichkeit zum Einfügen von Dokumentation (oder einer Beschreibung) der Ausgang XSD.Generieren Sie xsd-Annotations- und -Dokumentationstags aus dem C# -Klassencode

Zum Beispiel ist die C# Klasse

public class Animal 
{ 
    public int NumberOfLegs; 
} 

erzeugt die XSD

<?xml version="1.0" encoding="utf-16"?> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Animal" nillable="true" type="Animal" /> 
    <xs:complexType name="Animal"> 
    <xs:sequence> 
     <xs:element minOccurs="1" maxOccurs="1" name="NumberOfLegs" type="xs:int" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

aber ich möchte in der Lage sein, XSD Anmerkungen als Metadaten der Klasse hinzufügen, damit die XSD wie kommt

<xs:complexType name="Animal"> 
    <xs:sequence> 
    <xs:element minOccurs="1" maxOccurs="1" name="NumberOfLegs" type="xs:int"> 
     <xs:annotation> 
     <xs:documentation>Will need to be greater than 0 to walk!</xs:documentation> 
     </xs:annotation> 
    </xs:element> 
    </xs:sequence> 
</xs:complexType> 

Gibt es einen prägnanten Weg, dies innerhalb des C# -Codes zu erreichen? Jede Art von Beschreibung zu XML-Elementen/Attributen hinzuzufügen wäre in Ordnung. Die Anmerkung hat neben dem eigentlichen Code, so etwas sein:

public class Animal 
{ 
    [XmlAnnotation("Will need to be greater than 0 to walk!")] 
    public int NumberOfLegs; 
} 

Das heißt, es muss automatisch dokumentiert von den Kommentaren sein.

Antwort

0

Versuchen folgende:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 
using System.Xml; 
using System.Xml.Linq; 
using System.IO; 


namespace ConsoleApplication49 
{ 

    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      StreamReader reader = new StreamReader(FILENAME); 
      reader.ReadLine(); //skip the xml identification with utf-16 encoding 
      XDocument doc = XDocument.Load(reader); 

      XElement firstNode = (XElement)doc.FirstNode; 
      XNamespace nsXs = firstNode.GetNamespaceOfPrefix("xs"); 

      XElement sequence = doc.Descendants(nsXs + "element").FirstOrDefault(); 

      sequence.Add(new XElement(nsXs + "annotation", 
       new XElement(nsXs + "documention", "Will need to be greater than 0 to walk!") 
       )); 

     } 
    } 


} 
+0

Sorry, war meine Frage vielleicht nicht spezifisch genug. Die Kommentare müssen neben dem eigentlichen Code sein, ich werde die Frage aktualisieren. – Patrick

Verwandte Themen