A powerful and lightweight XML parser written entirely in GML — perfect for reading and manipulating XML files directly in GameMaker, with no external dependencies or DLLs.
- Load XML string from file using buffer (it's implemented on the script, you don't have to manage this) or just parse XML from string
- Struct-based architecture: XMLDocument, XMLNode
- Supports nested nodes, attributes, inner text, and CDATA(as inner text)
- Ignores comments from XML file/string
- Easy to integrate
- 100% GML, no external dependencies
- Ideal for level data, game settings, dialogue systems, and more
- Find nodes using find_first_by_tag or find_all_by_tag
- Getting and setting functions for tag, inner_text, child, children
- Add/remove child node functions
- Generate a new XML string
- Save a XML file
var document = new XMLDocument();Examples:
// Load a XML file if (document.load(working_directory + "test.xml")) { // Do something with document here }// Parse a XML string document.parse("<?xml version="1.0" encoding="UTF-8"?> <player name="Hero" level="5"> <inventory> <item id="1" name="Sword" /> <item id="2" name="Shield" /> </inventory> </player>"); // Do something with document here// Make an auxiliar variable and set it to document's root, if you don't have to access root document more than once, you don't need to make this variable, just use document.root var _root = document.root;// Find first "player" tag var _player = document.root.find_first_by_tag("player"); // If the node was found if(!is_undefined(_player)) { // Get name attribute var _name = _player.get_attribute("name"); // If name attribute exists if(!is_undefined(_name)) { name = _name; } }- This example loads name, level and items for a player
// Instance XMLDocument document = new XMLDocument(); // Make an array for items items = []; // Make name variable name = ""; // Make level variable level = 1; // Load XML file and check if it's OK if(document.load(working_directory + "test.xml")) { // Find first "player" tag var _player = document.root.find_first_by_tag("player"); // If the node was found if(!is_undefined(_player)) { // Get level attribute var _level = _player.get_attribute("level"); // Get name attribute var _name = _player.get_attribute("name"); // If level and name attributes exist if(!is_undefined(_level) && !is_undefined(_name)) { name = _name; level = real(_level); } // Find inventory node var _inventory = _player.find_first_by_tag("inventory"); // If the node was found if(!is_undefined(_inventory)) { // Get children array var _items = _inventory.get_children(); // Loop through children array for(var _i = 0; _i < array_length(_items); _i++) { // Get item var _item = _items[_i]; // Get id attribute var _id = _item.get_attribute("id"); // Get name attribute var _item_name = _item.get_attribute("name"); // If id and name attributes exist if(!is_undefined(_id) && !is_undefined(_item_name)) { // Create a struct for loaded item var _litem = {}; // Set item struct keys struct_set(_litem,"id",_id); struct_set(_litem,"name",_item_name); // Add it to items array array_push(items,_litem); } } } } }