无法理解tinyxml教程以及如何使用它

时间:2012-02-06 11:01:50

标签: c++ object tinyxml

我已经仔细研究了tinyxml(C ++)教程,但仍然无法真正理解我如何将这些示例应用于我正在尝试的内容。我正在尝试做的就是使用xml在游戏中生成一系列房间对象。有人能够给我一个简短的例子,请使用以下xml和Room对象吗? Xml是:

<room>
    <name>Prison room</name>
    <connections>
    <connection>Guard room</connection>
    </connections>
  <items>
    <item>
      <name>Short sword</name>
      <attack>2</attack>
       <armor>0</armor>
    </item>
  </items>
  <monsters></monsters>
</room>

Room对象包含以下字段:

std::vector<Item> itemsInRoom;
std::vector<Room> connectingRooms;
std::vector<Monster> monstersInroom;
std::string roomName;

提前致谢!

编辑:删除编辑,因为特定问题已解决。

1 个答案:

答案 0 :(得分:1)

要做的第一件事是了解有关XML以及表示/构造/抽象数据的更多信息。例如,编码例如通常是不明智的。房间内的“短剑”项目和你一样。相反,您可能希望在其他地方提供该项目(或其模板)的定义,并且只能引用该项目,可能在房间节点内有一些额外的参数。您可能还想学习使用属性(所有数据相同,某些数据应该属于属性)。

一旦你了解了这一点,实际的TinyXML就很容易了。 TinyXML非常简单:

  1. 同意一些语义。写下来,记住它们,在创建XML文件时遵循它们。
  2. 创建TiXmlDocument,为其指定数据文件的名称
  3. 在文档对象上调用LoadFile
  4. 调用FirstChildElement,为您提供根节点(请注意,如果您在XML中有多个房间,则需要有一个单独的根节点!)
  5. 使用FirstChildElementNextSiblingElement
  6. 迭代cildren
  7. 现在您必须记住XML文件的结构(或其元素的语义)。 TinyXML 无法神奇地为您解决这个问题
  8. 以与房间节点相同的方式使用FirstChildElementNextSiblingElement每个房间内的“任何内部”(无论您决定了什么),以弄清楚每个房间的样子以及内容是什么他们。 你必须知道这些数据意味着什么,TinyXML不能知道这种事情,它只是为你提供结构化数据。
  9. 解析引用并设置相应的数据结构(例如,当你有类似<door to="guard_room" x="5" y="3" status="locked" />的内容时,创建必要的链接,以便你的游戏做出适当的反应。
  10. (不要忘记检查错误)

    TinyXML网站上的教程也很容易理解(最后我看了大约2 - 3年前,你基本上可以复制粘贴它们)。如果这些确实构成了相当大的问题,我会重新考虑暂时编写RPG的想法。我不是永远在说,但至少在你有足够的经验来追随这些之前。