2017-05-26 67 views
0

在我認爲成功編寫了一個xml文檔之後,xna拒絕加載它說「XML不在XNA中間格式中,缺少XnaContent根元素」。 對類似問題的一些答案提示更改屬性,但最終我希望此文件在運行時創建並在運行時讀取。 除了十幾個stackoverflow的答案,我也閱讀了大部分有關XmlDocument的msdn條目 - 沒有找到一個神奇的「PutDocInIntermediateXNAFormat」方法,真是一個驚喜(我當然沒有找到一個字面上的名字)。 我確定我只是錯過了最簡單的部分所有Youtube視頻關於創建一個我只是假設知道的XML文件。 因此,在我浪費更多時間之前,有誰能請抓住我的手,並引導我嗎?C#如何在代碼中編寫xml文件,以便xna接受加載它?

編輯: 它接縫xna並不滿意我試圖使用不對應於底層類的xml文件。我怎樣才能讓它加載不管?

編輯2:
我做了一個類,並使用這個類的XML文件。我沒有問題將它保存爲一個XML文件,也沒有加載到類實例。 但是我確實有一個問題,那就是使用這些xml文件作爲xna的資源。
下面是類:

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; 
} 
} 

下面是從該類生成XMLFILES的代碼:

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(); 

這裏是由代碼生成的一個XMLFILE:

<?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> 

我嘗試加入
<XnaContent> <Asset Type ="LevelSave">
個手動標籤,它確實修復了它,並最終讓我編譯 - 除非它不。它現在給出了錯誤There was an error while deserializing intermediate XML. Cannot find type "LevelSave".(我不嘮叨不能用作內容了,儘管如此。)
我精神上完成了,請幫助我。

+0

你能張貼您的XML和它基礎類將保存你想要導入的數據?我曾經經常成功地使用XNA和XNA。我發現人們最常見的問題是建立秩序。在內容處理器嘗試將文件轉換爲xnb之前,主要不構建將包含XML數據的基礎類。您的數據類是否在您的遊戲項目構建/運行之前建立的自己的項目中?不是說這是問題,但請發佈,我們會看看。 –

+0

這很有趣!我根本沒有使用底層類 - 我想要做的只是保存視頻中的少量數據(我發現即使是新波士頓在其教程中沒有底層類也很令人震驚)。是否有可能沒有做?我是否應該將問題名稱更改爲包含我想在沒有課程的情況下加載? – harlekintiger

+0

這篇博文介紹瞭如何讓內容處理器將XML構建爲可在XNA中使用的xnb文件的基礎知識:https://blogs.msdn.microsoft.com/shawnhar/2009/03/25/automatic-xnb- serialization-in-xna-game-studio-3-1 /這是博客索引,您可以在其中找到該博客以及許多其他與XNA一起工作時必不可少的內容:http://www.shawnhargreaves.com/blogindex.html –

回答

0

從「缺少XnaContent根元素」的消息,我會假設你的XML文檔沒有叫XnaContent在它的根元素...

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

請問您生成的XML看什麼像這樣...

<?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> 

。注意到<XnaContent>根元素...

+0

呃,實際上,剝離甚至它的內衣後,該文件只有標籤。 – harlekintiger

+0

雖然頭部看起來不錯,任何想法如何通過代碼實現它? – harlekintiger

+0

首先取決於您如何創建XML。改變你的問題來展示你是如何做到的。 – Mashton

相關問題