2017-05-26 3 views
0

Nach was ich dachte, war erfolgreich ein XML-Dokument zu schreiben, weigerte XNA, es zu laden und sagte: "XML ist nicht im XNA-Zwischenformat. Fehlendes XnaContent-Root-Element.". Ein paar Antworten auf ähnliche Fragen schlagen vor, die Eigenschaft zu ändern, aber am Ende möchte ich, dass diese Datei zur Laufzeit erstellt und zur Laufzeit gelesen wird. Abgesehen von einem Dutzend Stackoverflow Antworten lese ich auch die meisten msdn Eintrag über XmlDocument - ohne eine magische "PutDocInIntermediateXNAFormat" -Methode zu finden, was für eine Überraschung (Ich habe natürlich nicht nach einer Methode mit buchstäblich diesem Namen gesucht). Ich bin sicher, ich vermisse nur die einfachsten Teile aller Youtube-Videos über das Erstellen einer XML-Datei, die ich gerade als bekannt angesehen habe. Bevor ich also noch eine Stunde verschwende, könnte mir bitte jemand meine Hand nehmen und mich dabei führen?C# Wie schreibe ich eine XML-Datei in Code, so dass XNA akzeptiert, es zu laden?

Bearbeiten: Es scheint XNA ist nicht zufrieden mit mir versuchen, eine XML-Datei verwenden, die nicht zu einer zugrunde liegenden Klasse entspricht. Wie kann ich es trotzdem laden?

Edit2:
Ich machte eine Klasse und machte XML-Dateien mit dieser Klasse. Ich habe kein Problem, es als XML-Datei zu speichern oder es wieder in eine Klasse instanze zu laden. Allerdings Ich habe ein Problem mit diesen XML-Dateien als Assets für XNA.
Hier ist die Klasse:

namespace TheLemmingsGuideToMagrathea 
{ 
public class LevelSave 
{ 
    public int lemmingsToSpawn; 
    public int lemmingsToSave; 

    public int remainingStairs; 
    public int remainingQuests; 
    public int remainingGuidesv2; 
    public int remainingThumps; 
    public int remainingConciousnesses; 

    public string[] map; 
    public Point start; 
    public Point finish; 

    public int timeInSeconds; 
} 
} 

Hier ist der Code, der die XMLFiles von dieser Klasse erzeugt:

LevelSave save = new LevelSave(); 
save.map = level.Stringify(); 
save.start = startLocation; 
save.finish = finishLocation; 
save.lemmingsToSpawn = 50; 
save.lemmingsToSave = 25; 
save.timeInSeconds  = 5 * 60; 
save.remainingStairs = 10; 
save.remainingQuests = 10; 
save.remainingGuidesv2 = 10; 
save.remainingThumps = 10; 
save.remainingConciousnesses = 10; 

XmlSerializer serializer = new XmlSerializer(typeof(LevelSave)); 

if (!Directory.Exists(Path.Combine("Content", "Levels"))) 
    Directory.CreateDirectory(Path.Combine("Content", "Levels")); 
if (!Directory.Exists(Path.Combine("Content", "Levels", levelNameTextBox.Text))) 
    Directory.CreateDirectory(Path.Combine("Content", "Levels", levelNameTextBox.Text)); 
StreamWriter writer = new StreamWriter(Path.Combine("Content", "Levels", levelNameTextBox.Text, levelNameTextBox.Text + ".xml")); 
serializer.Serialize(writer, save); 
writer.Close(); 

Und hier ist ein xmlFile von diesem Code generiert:

<?xml version="1.0" encoding="utf-8"?> 
<LevelSave xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <lemmingsToSpawn>50</lemmingsToSpawn> 
    <lemmingsToSave>25</lemmingsToSave> 
    <remainingStairs>10</remainingStairs> 
    <remainingQuests>10</remainingQuests> 
    <remainingGuidesv2>10</remainingGuidesv2> 
    <remainingThumps>10</remainingThumps> 
    <remainingConciousnesses>10</remainingConciousnesses> 
    <map> 
    <string> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string> 
    <string> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string> 
    <string> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string> 
    <string> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string> 
    <string> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string> 
    <string> 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string> 
    <string> 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string> 
    <string> 0, 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string> 
    <string> 0, 0, 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string> 
    <string> 0, 0, 0, 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string> 
    <string>11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11</string> 
    <string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string> 
    <string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string> 
    <string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string> 
    <string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string> 
    <string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string> 
    <string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string> 
    <string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string> 
    <string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string> 
    <string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string> 
    </map> 
    <start> 
    <X>1</X> 
    <Y>9</Y> 
    </start> 
    <finish> 
    <X>19</X> 
    <Y>2</Y> 
    </finish> 
    <timeInSeconds>300</timeInSeconds> 
</LevelSave> 

Ich habe versucht, die
<XnaContent> <Asset Type ="LevelSave">
hinzuzufügen 210 Tags manuell, was es tatsächlich behebt und schließlich kompilieren lässt - außer es nicht. Es gibt jetzt den Fehler There was an error while deserializing intermediate XML. Cannot find type "LevelSave". (ich nage nicht darüber, nicht mehr als Inhalt verwendet werden zu können).
Ich bin mental fertig für, bitte hilf mir.

+0

können Sie Ihre XML posten und es die zugrunde liegende Klasse, die die Daten enthält, die Sie importieren möchten? Ich habe XML oft und erfolgreich mit XNA benutzt. Ich fand das häufigste Problem, das Leute hatten, war Build Order. Hauptsächlich nicht die zugrunde liegende Klasse, die die Daten aus dem XML enthalten würde, bevor der Content-Prozessor versuchte, die Datei nach xnb zu konvertieren. Ist Ihre Datenklasse in einem eigenen Projekt, das vor dem Erstellen/Ausführen Ihres Spielprojekts erstellt wird? Nicht zu sagen, das ist das Problem, aber bitte posten und wir werden es uns ansehen. –

+0

Das ist interessant! Ich habe überhaupt keine zugrunde liegende Klasse benutzt - alles was ich tun wollte, war eine kleine Menge an Daten zu speichern, wie in den Videos (ich finde es schockierend, dass selbst New Boston keine zugrundeliegenden Klassen in ihrem Tutorial hatte!) Ist es möglich? mach es ohne?Sollte ich den Namen der Frage so ändern, dass ich ohne eine Klasse laden möchte? – harlekintiger

+0

Dieser Blog geht über die Grundlagen der Erstellung eines XML-Inhalts durch den Content-Prozessor in eine Xnb-Datei, die in XNA verwendet werden kann: https://blogs.msdn.microsoft.com/shawnhar/2009/03/25/automatic-xnb- serialization-in-xna-game-studio-3-1/und das ist der Blog-Index, in dem Sie diesen Blog und viele andere finden, die für die Arbeit mit XNA unentbehrlich sind: http://www.shawnhargreaves.com/blogindex.html –

Antwort

0

Von der "Missing XnaContent Wurzelelement" -Meldung, würde ich Ihr XML-Dokument übernimmt kein Element XnaContent an seiner Wurzel genannt hat ...

https://blogs.msdn.microsoft.com/shawnhar/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer/

Hat Sie generierte XML etwas aussehen so ...

<?xml version="1.0" encoding="utf-8"?> 
<XnaContent> 
    <Asset Type="TestClass"> 
    <GetSetProperty>Hello World</GetSetProperty> 
    <PublicField>1</PublicField> 
    <Nested> 
     <Name>Shawn</Name> 
     <IsEnglish>true</IsEnglish> 
    </Nested> 
    </Asset> 
</XnaContent> 

beachten Sie die <XnaContent> Wurzelelement ...

+0

Nun, tatsächlich, nach dem Abisolieren von sogar seiner Unterwäsche, hatte der Doc nur die Tags. – harlekintiger

+0

Obwohl der Kopf sieht gut aus, jede Idee, wie man es durch Code implementieren? – harlekintiger

+0

Hängt davon ab, wie Sie Ihre XML-Datei erstellen. Ändern Sie Ihre Frage, um zu zeigen, wie Sie es tun. – Mashton

Verwandte Themen