我正在尝试通过管道将XML文件加载到我的MonoGame游戏中,但是我收到了错误。
'Element'是无效的XmlNodeType。第10行,第6位。
我在外部可移植类库项目中为XML文件创建了我的类,并将该DLL添加到管道内容引用中。但是当我尝试在MonoGame Pipeline应用程序中构建XML文件时,我得到了上述错误。
任何想法?
XML和类代码位于
之下MainMenu.xml (我已用xml样式注释标记错误行,注释不在实际文件中)
<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:ns="Microsoft.Xna.Framework">
<Asset Type="Menu">
<Title>Main Menu</Title>
<Background>
<Type>animation</Type>
<Data>MainMenuBackground</Data>
</Background>
<Options>
<Option> <!-- Error Here -->
<Type>text</Type>
<Name>new</Name>
<Disabled>false</Disabled>
<Text>New Game</Text>
<Action>newGame</Action>
</Option>
<Option>
<Type>text</Type>
<Name>save</Name>
<Disabled>true</Disabled>
<Text>Save Game</Text>
<Action>saveGame</Action>
</Option>
<Option>
<Type>text</Type>
<Name>load</Name>
<Disabled>false</Disabled>
<Text>Load Game</Text>
<Action>loadGame</Action>
</Option>
<Option>
<Type>text</Type>
<Name>exit</Name>
<Disabled>false</Disabled>
<Text>Exit Game</Text>
<Action>exitGame</Action>
</Option>
</Options>
<Buttons>
<Keyboard>
<Accept>Enter</Accept>
<Cancel>Esc</Cancel>
</Keyboard>
<Controller>
<Accept>A</Accept>
<Cancel>B</Cancel>
</Controller>
</Buttons>
</Asset>
</XnaContent>
Menu.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace XMLMenu
{
public class Menu
{
public String Title;
public Background Background = new Background();
public Option[] Options = new Option[] { };
public Buttons Buttons = new Buttons();
}
}
Background.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace XMLMenu
{
public class Background
{
public String Type;
public String Data;
}
}
Option.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace XMLMenu
{
public class Option
{
public String Type;
public String Name;
public Boolean Disabled;
public String Text;
public string Action;
}
}
Buttons.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace XMLMenu
{
public class Buttons
{
public ControlButtons Keyboard = new ControlButtons();
public ControlButtons Controller = new ControlButtons();
}
}
ControlButtons.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace XMLMenu
{
public class ControlButtons
{
public String Accept;
public String Cancel;
}
}
答案 0 :(得分:1)
用于将XML内容导入XNA / MonoGame项目的IntermediateSerializer期望集合中的项目标记为<Item>
而不是<Option>
,这就是您收到错误的原因。您有2个选项可以解决此问题。
第一个选项是将每个<Option>
代码更改为<Item>
代码。如果您还没有对XMLMenu程序集上的MonoGame程序集的引用,并且不希望添加依赖项,那么这是您的选择。
第二个,我认为更好,选项是添加对MonoGame程序集的引用,并在Menu类的Options数组中添加一个属性。 ContentSerializer属性具有名为CollectionItemName的构造函数参数。如果您指定&#34;选项&#34;对于此参数,编译成功。我复制了你的设置,修改了Menu类,如下所示:
using Microsoft.Xna.Framework.Content;
using System;
namespace XMLMenu
{
public class Menu
{
public String Title;
public Background Background = new Background();
[ContentSerializer(CollectionItemName = "Option")]
public Option[] Options = new Option[] { };
public Buttons Buttons = new Buttons();
}
}
并成功构建了内容。没有ContentSerializer属性,我收到了与您相同的错误。
有关详细信息,请阅读&#34;收集&#34;以及本文中的前几节:https://blogs.msdn.microsoft.com/shawnhar/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer/