2010-01-03 25 views
1
<?xml version="1.0" encoding="utf-8" ?> 
<Hero> 
    <Legion> 
    <Andromeda> 
     <SpellOne> 
     <Name>Comet</Name> 
     <Icon>Images/Spell/Andromeda/Spell1.gif</Icon> 
     <Action>Target Unit</Action> 
     <Description>Andromeda rips a comet from her dimension to hurl at an enemy, damaging and stunning them.</Description> 
     <Ranks> 
      <First>    
      <ManaCost>95</ManaCost> 
      <Cooldown>10 Seconds</Cooldown> 
      <Effects>Deals 100 Magic damage and stuns target for 1.75 seconds.</Effects> 
      <ExtraEffects></ExtraEffects> 
      </First> 
      <Second> 
      <ManaCost>110</ManaCost> 
      <Cooldown>10</Cooldown> 
      <Effects>Deals 175 Magic damage and stuns target for 1.75 seconds.</Effects> 
      <ExtraEffects></ExtraEffects> 
      </Second> 
      <Third> 
      <ManaCost>125</ManaCost> 
      <Cooldown>10</Cooldown> 
      <Effects>Deals 250 Magic damage and stuns target for 1.75 seconds.</Effects> 
      <ExtraEffects></ExtraEffects> 
      </Third> 
      <Fourth> 
      <ManaCost>140</ManaCost> 
      <Cooldown>10</Cooldown> 
      <Effects>Deals 325 Magic damage and stuns target for 1.75 seconds.</Effects> 
      <ExtraEffects></ExtraEffects> 
      </Fourth> 
     </Ranks> 
     </SpellOne> 

     <SpellTwo> 
     <Name>Aurora</Name> 
     <Icon>Images/Spell/Andromeda/Spell2.gif</Icon> 
     <Action>Target Position</Action> 
     <Description>Andromeda shakes the magnetic field of Newerth, causing an Aurora to erupt, damage, and reduce the armor of all enemies in front of her.</Description> 
     <Ranks> 
      <First> 
      <ManaCost>40</ManaCost> 
      <Cooldown>15 Seconds</Cooldown> 
      <Effects>Deals 25 damage to targets in a line and applies Aurora for 15 seconds.</Effects> 
      <ExtraEffects>-5% Base Damage, -2 Armor</ExtraEffects> 
      </First> 
      <Second> 
      <ManaCost>40</ManaCost> 
      <Cooldown>15 Seconds</Cooldown> 
      <Effects>Deals 50 damage to targets in a line and applies Aurora for 15 seconds.</Effects> 
      <ExtraEffects>-10% Base Damage, -3 Armor</ExtraEffects> 
      </Second> 
      <Third> 
      <ManaCost>40</ManaCost> 
      <Cooldown>15 Seconds</Cooldown> 
      <Effects>Deals 75 damage to targets in a line and applies Aurora for 15 seconds.</Effects> 
      <ExtraEffects>-15% Base Damage, -4 Armor</ExtraEffects> 
      </Third> 
      <Fourth> 
      <ManaCost>40</ManaCost> 
      <Cooldown>15 Seconds</Cooldown> 
      <Effects>Deals 100 damage to targets in a line and applies Aurora for 15 seconds.</Effects> 
      <ExtraEffects>-20% Base Damage, -5 Armor</ExtraEffects> 
      </Fourth> 
     </Ranks> 
     </SpellTwo> 

什么是准备进行序列化XML数据的正确方法/解串

所以我的问题是,我是不是正确格式化我的XML?什么是适当的方式来做到这一点。只要我学习准备用于序列化/反序列化的XML数据的正确方法,我不会介意从头开始重新编写1300行XML。

非常感谢。

+0

如何:在Visual Basic .NET中序列化和反序列化XML:http://support.microsoft.com/kb/316730 – 2010-01-03 02:23:34

+0

我不问过序列化的编程方面。我首先需要学习正确的方法来首先准备数据。 :D请帮助。 – 2010-01-03 02:26:51

+0

“准备”数据是什么意思?问题也是关于格式而不是“准备”。你能否更具体地说出你的担忧/恐惧/怀疑是什么? (如果有帮助,除了', ...'和', ...'元素外,你显示的内容看起来还好,这可以通过重复“”和“”元素来更好地处理。) – itowlson 2010-01-03 02:38:55

回答

1
  1. 构建可序列化的对象模型。

  2. 创建并填充它的一个实例。

  3. 将其序列化为XML。

现在你知道你的输入XML需要的样子。

一般来说,只要你,让你发挥控制序列化的XML格式的各种属性做不在身边乱,每个属性,这是一个值类型看起来就像这样:

<PropertyName>ValueSerializedToText</PropertyName> 

并且每个参考类型的属性将如下所示:

<PropertyName> 
    <Property1>Value</Property1> 
    <Property2>Value</Property2> 

...等等。

所以,在你的榜样,人们会认为XML反序列化到Hero类型的对象,其Legion属性包含一个对象,有一个Andromeda财产。也就是说,不,这不是你的XML应该是什么样子。

你实际上将有一个Hero物体NameFaction性质,这可能是序列化这样的:

<Hero> 
    <Faction>Hellbourne</Faction> 
    <Name>Corrupted Disciple</Name> 
    ... 

所有这一切都是担心说错话。你不应该把注意力集中在你想要的XML看起来像什么。你应该关注你需要什么样的对象模型。做到这一点,XML序列化格式将自行处理。

+0

你的答案提供了很好的输入和正确的耳朵拉我需要的类型。但我有一个疑问。我保存到XML中的所有信息都是从维基网站手动转录的。我不明白你的意思是“专注于你需要你的对象模型的样子”。两者是否相互排斥? – 2010-01-03 12:55:29

+0

你的程序的重点在于对这些数据做些什么,对吧?设计程序来做它将要做的事情,而不用担心它将要读取的XML将会是什么样子。这是一个你应该关心的事情清单上非常低的实现细节。 你在写什么程序?我的意思是,我知道这是HoN的情况,你可以从我的例子中看出来,但它的目的是什么? – 2010-01-03 17:41:16

4

有两件事情在你的XML中跳出来。如果我们正在谈论C#序列化,那么您的对象必须具有类似于SpellOne,SpellTwo以及Ranks“First”,“Second”,“Third”和“Fourth”的属性。

现在,如果这一切是成立的,并且不可能增加/减少等级和/或法术的数量,那可能并不可怕。但是如果你为某种形式的角色或者第五等级添加一个SpellThree,你必须更新你的对象。

我可能会建议沿着

<Spells> 
    <Spell id="1" /> 
    <Spell id="2" /> 
</Spells> 

线的东西然后法术结构可以是相同的,你可以有那么这将被序列化/反序列化列表的C#对象。

除此之外,你的格式看起来不错。

你可能会尝试的一件事是创建一个简单的小控制台应用程序,创建你的法术对象,然后将它隔离到XML。看看它输出的结构,这会给你一个如何格式化的好主意。

2

我过去做过这种事情的一种方法是采取相反的方法 - 用我感到满意的结构编写域对象,然后将其序列化为XML。一旦完成,我将为它编写一个XSD,以便我可以在以后舒适地手动编辑XML。我采取了这种方法,因为让域对象变得更加重要,我并不在乎XML是什么样,特别是一旦我拥有了XSD就行了。

相关问题