#c #xml #game-development #tinyxml
#c #xml #разработка игр #tinyxml
Вопрос:
Я выгружаю массив данных из объекта с в XML-файл. Как я могу получить данные из их атрибута (в моем случае имя атрибута — «Данные») и сохранить результат в каком-либо буфере для дальнейшей обработки данных?
Я использую библиотеку TinyXML.
Функция сохранения объекта (см. Результат в формате XML ниже)
TiXmlDocument doc("text.xml"); if (!doc.LoadFile()) return false; TiXmlHandle hDoc(amp;doc); TiXmlElement* elem; TiXmlHandle hRoot(0); elem = hDoc.FirstChildElement().Element(); if (!elem) return false; std::string name = elem-gt;Value(); hRoot = TiXmlHandle(elem); TiXmlElement* chunkbranch = new TiXmlElement("ChunkBranch"); root-gt;LinkEndChild(chunkbranch); for (int x = 0; x lt; this-gt;mapChunk.size(); x ) { for (int y = 0; y lt; this-gt;mapChunk[x].size(); y ) { TiXmlElement* chunk; chunk = new TiXmlElement("Chunk"); chunkbranch-gt;LinkEndChild(chunk); chunk-gt;SetAttribute("posX", x); chunk-gt;SetAttribute("posY", y); TiXmlElement* chunkdata; chunkdata = new TiXmlElement("ChunkData"); chunk-gt;LinkEndChild(chunkdata); chunkdata-gt;SetAttribute("data", this-gt;mapChunk[x][y]-gt;getChunkAsString().c_str()); //maybe can be use some other method for saving data? } }
Здесь я называю атрибут «ChunkData». Здесь пытаюсь получить значения массива «ChunkBranch» gt;gt;gt; «ChunkData» gt; gt; gt; gt; gt; gt; данные
elem = hRoot.FirstChild("ChunkBranch").FirstChild().Element(); for (elem; elem; elem = elem-gt;NextSiblingElement()) { std::string buff(""); buff = elem-gt;Value(); if (buff == "Chunk") { int buffX; int xKey = elem-gt;QueryIntAttribute("posX", amp;buffX); int yKey = elem-gt;QueryIntAttribute("posY", amp;buffX); this-gt;mapChunk[xKey][yKey] = amp;Chunk(sf::Vector2f(xKey,yKey)); std::cout lt;lt; "In chunk:t" lt;lt; xKey lt;lt; " x " lt;lt; yKeylt;lt; "n"; TiXmlElement* cData; cData = elem-gt;FirstChildElement("ChunkData"); int test; const char* pKey = cData-gt;Value(); const char* xke = cData-gt;GetText(); cData-gt;QueryIntAttribute("data", amp;test);//lt;lt; somewhere here the //program doesn't return array //and pKey = 0 (not NULL, just 0), after loading it will stop
XML-данные
lt;?xml version="1.0" ?gt; lt;basegt; lt;ChunkBranchgt; lt;Chunk posX="0" posY="0"gt; lt;ChunkData data="0 19 0 0 0 0 0 19 0 0 0 0 0 0 19 19 0 0 0 0 0 " /gt; lt;/Chunkgt; lt;Chunk posX="0" posY="1"gt; lt;ChunkData data="0 0 0 0 0 0 0 0 19 0 0 0 0 0 19 0 0 0 0 0 0 19 19 0 0 0 0 0 "/gt; lt;/ChunkBranchgt; lt;/basegt;
Комментарии:
1. Ваш вопрос заключается в том, как вы сохраняете XML-данные или как вы их загружаете?
2. как загрузить данные из XML-файла в некоторый буфер для дальнейшей работы с данными
3. всегда ли существует только одна ветвь, содержащая много фрагментов, и каждый фрагмент содержит один фрагмент данных? Или может быть более одного ответвления?
4. да, есть один фрагмент, в котором может быть больше «Фрагментов» с одним «фрагментом данных», я хочу извлечь данные из атрибута «Данные» во временный буфер, но не знаю, как это сделать
5. По какой-либо конкретной причине вы используете TinyXML-1, а не TinyXML-2?