2016-05-10 11 views
0

Ich versuche derzeit, einen Teil einer Java-Bibliothek in eine C# -Bibliothek zu übersetzen, um sie in Unity zu verwenden. In dieser Java-Bibliothek werden einige der Klassen aus XML-Dateien generiert, deren .xml-Dateien ich habe, aber da ich sowas nie gemacht habe, weder in Java noch in C#.XML-Syntax zum Generieren von C# -Code

Ich habe einige Nachforschungen gemacht und ich habe verschiedene Möglichkeiten gefunden, diese .xml-Dateien in .cs-Klassen umzuwandeln, aber ich kann keine Dokumentation über die Syntax finden, die die .xml haben sollte.

Ich habe versucht, das Werkzeug xsd.exe zu bedienen und ich verwalten aus einer XML-Datei erstellen und XSD-Datei, aber wenn ich die CS- zu erzeugen versucht Datei ich diesen Fehler propted wurde: Error: Can only generate one of classes or datasets.

ich dann einige gemacht Forschung und fand ein anderes Werkzeug, Xsd2Code, also versuchte ich es mit den gleichen XML-Dateien zu verwenden, um eine CS-Datei zu erhalten, aber es aufgefordert, einen Fehler über die Struktur beschweren:

C:\Program Files (x86)\Xsd2Code>Xsd2Code.exe Vehicle.xml Vehicle.cs 

Xsd2Code Version 3.4.0.32990 
Code generation utility from XML schema files. 

Error: Declaración XML inesperada. La declaración XML debe ser el primer nodo del documento y no pueden aparecer espacios en blanco delante. Línea 2, posición 3. 
     SubType: Unspecified 

     Rule: 

ich es übersetzen werde, da es ist in Spanisch: Fehler: Unerwartete XML-Deklaration. Die XML-Deklaration muss der erste Knoten sein und darf zuvor keine Leerzeichen enthalten. Linie 2, Position 3.

Das sind die ersten Zeilen der spezifischen Datei:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:hfp="http://www.w3.org/2001/XMLSchema-hasFacetAndProperty" targetNamespace="http://www.w3.org/2001/XMLSchema" blockDefault="#all" elementFormDefault="qualified" version="1.0" xml:lang="EN"> 
<?xml version="1.0" encoding="UTF-8"?> 
<traciClass> 
    <name>Vehicle</name> 

EDIT: Ich korrigierte ihn als den ersten Kommentar sagt, aber jetzt erhalte ich

Error: Schema validation failed: 
El elemento 'traciClass' no es compatible en este contexto. 
     SubType: Unspecified 

     Rule: 

The element traciClass is not compatible in this context. 

Original-Beitrag weiter:

Dies ist eine Vorlage, wie die verschiedenen Objekte in XML für Java definiert werden sollen, aber ich frage mich, ob diese Struktur für C# variieren wird.

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This file is used to generate a Java class with the same name for a 
    TraCI object. This saves manually writing a lot of boilerplate code. --> 
<traciClass> 
    <!-- The name of the object. It will be used as the class name. First letter 
     is capital. Must be equal to this document's file name. --> 
    <name>ExampleTraciObject</name> 

    <!-- The javadoc of the class that will be generated. --> 
    <javadoc> 
    Put your object description here. 
    </javadoc> 

    <!-- Lists all the other repositories that are needed by the queries --> 
    <repos> 
     <repo>Repository1</repo> 
     <repo>Repository2</repo> 
    </repos> 

    <command>it.polito.appeal.traci.protocol.Constants.CMD_GET_VEHICLE_VARIABLE</command> 

    <!-- List of all "read" queries, i.e. those that don't change the state 
     of the object and return a value --> 
    <readQueries> 

     <readQuery> 

      <!-- The name of the query. If the name is XXX, the Java class will contain 
       a method named queryXXX() --> 
      <name>ReadSomeValueQuery</name> 

      <!-- The enum name of the query. It will appear as an enum entry 
      in the inner Variable enum, and can be used with the getReadQuery() method --> 
      <enum>SOME_VALUE</enum> 

      <!-- A numeric value or a constant of type int that tells the variable 
       ID --> 
      <const>it.polito.appeal.traci.protocol.Constants.SOME_VARIABLE</const> 

      <!-- The Java class name that can make the query. It must be a subclass 
       of ReadObjectVarQuery. If the class is on the package 
       it.polito.appeal.traci, the package name can be omitted--> 
      <query>ReadObjectVarQuery.IntegerQ</query> 

      <!-- The return type of the query. It must be the same type (or a supertype) 
       of the type parameter V specified in the above class. 
       Leave it empty to use the query class as the return type. --> 
      <returnType>java.lang.Integer</returnType> 

      <!-- If true, it means that this value may change at every simulation 
       step. --> 
      <dynamic>true</dynamic> 
     </readQuery> 

     <!-- add other read queries here --> 
    </readQueries> 

    <!-- List of all "change state" queries, i.e. those that change the state 
     of the object and don't return a value --> 
    <changeStateQueries> 

     <!-- The syntax of a changeStateQuery is similar to readQuery, differences 
      are listed below. --> 
     <changeStateQuery> 
      <name>DoSomething</name> 
      <query>DoSomethingQuery</query> 
      <!-- Lists the read queries that may be changed by the execution of this 
      query, identified by their name. Calling this query will clear the caches 
      of the queries contained here. --> 
      <affects> 
       <affect>ReadSomeValueQuery</affect> 
      </affects> 
     </changeStateQuery> 

     <!-- add other change state queries here --> 

    </changeStateQueries> 

</traciClass> 

Ist es ein Problem der XML-Syntax?

+0

'' Muss die erste Zeile in der Datei sein. Genau das ist "XML-Deklaration muss der erste Knoten sein und darf keine Leerzeichen enthalten." versucht dir zu sagen :) – Fildor

+0

Ich werde meinen Beitrag bearbeiten. Ich änderte das und jetzt sagt es "traciClass ist in diesem Zusammenhang nicht kompatibel" – Biurrun

+0

Ich denke, Sie müssen es in ein Format umwandeln, das Ihr C# -Code-Generator erwartet. Zum Beispiel wäre "javadoc" ein offensichtlicher Fall eines Tags, das für C# nutzlos ist, aber wahrscheinlich nur umbenannt werden muss. – Fildor

Antwort

1

xsd.exe und xsd2Code zur Erzeugung von C# -Klassen aus einem XML-Schema (in der Regel mit der Erweiterung XSD, damit die Werkzeugnamen) verwendet werden. Sie werden Klassen nicht direkt aus einer Beispiel-XML Instanz generieren.

Anhand der xsd.exedocs können Sie daraus ein Schema aus einer XML-Instanz ableiten. Sie könnten dann daraus Klassen generieren.

xsd.exe instance.xml 
xsd.exe instance.xsd /classes 

Visual Studio können Sie auch dabei helfen: Kopieren Sie Ihre XML in die Zwischenablage und klicken Edit | Paste Special | Paste XML as Classes.

+0

Zwei Kommentare dazu: Erstens, aus irgendeinem Grund, wenn ich die 'Bearbeiten -> Einfügen Spezial -> XML einfügen Klassen 'es funktioniert nicht. Jede Art von Nachricht, Warnung oder irgendetwas wird aufgefordert, aber nichts wird eingefügt. Zweitens hatte ich auch gelesen, dass die xsd.exe verwendet werden könnte, um die .xsd-Datei aus der XML-Datei zu generieren, richtig? – Biurrun

+0

[Es funktioniert für mich] (http://pastebin.com/jQUgGy2H). Du hast recht, wenn du ein xsd aus dem XML abliest - Ich habe meine Antwort aktualisiert. Sie müssen dies in zwei Schritten tun, so scheint es. –

+0

Mmm ... ich bekomme diesen Fehler weiterhin, wenn ich 'xsd.exe Vehicle.xml Error: Error al procesar 'Vehicle.xml'. - El elemento 'traciClass' nicht kompatibel mit es contexto.' – Biurrun

Verwandte Themen