XmlNodeSetValue: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(Do not forget xmlUnloadFile.)
 
(11 intermediate revisions by 8 users not shown)
Line 1: Line 1:
[[Category:Incomplete]]
{{Server client function}}
 
__NOTOC__
__NOTOC__  
This function is made to be able to assign values to tags in XML files (eg. <something>anything</something>).
This fake function is for use with blah & blah and does blahblahblabhalbhl


==Syntax==  
==Syntax==  
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
bool xmlNodeSetValue ( xmlnode xmlnode, string value )             
bool xmlNodeSetValue ( xmlnode theXMLNode, string value [, bool setCDATA = false] )             
</syntaxhighlight>  
</syntaxhighlight>  
 
{{OOP||[[xmlnode]]:setValue|value|xmlNodeGetValue}}
===Required Arguments===  
===Required Arguments===  
*'''xmlnode:''' The node you want to set the value of.
*'''theXMLNode:''' The [[xml node]] you want to set the value of.
*'''value:''' The value you want the node to have.
*'''value:''' The [[string]] value you want the node to have.
 
{{New feature/item|4.0140|1.4.0|6782|
===Optional Arguments===
*'''setCDATA:''' A boolean indicating if you want the value to be enclosed inside CDATA tags.
{{OptionalArg}}
}}
*'''none'''


===Returns===
===Returns===
Returns ''true'' if successful, false otherwise.
Returns ''true'' if value was successfully set, ''false'' otherwise.


==Example==  
==Example==  
In this example is shown what xmlNodeSetValue does and how it works:
<section name="Server Example" class="server" show="false">
In this example a sample value is inserted into a XML file.
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
local xmlFile=xmlLoadFile("xmlfile.xml") --Open a file already created
local xmlFile = xmlLoadFile ( "exampleFile.xml" ) -- Open a file already created
if xmlFile then --If it's indeed opened:
if xmlFile then -- If it's indeed opened
local node=xmlCreateSubNode(xmlFile,"somesubnode") --Create a new subnode
    local node = xmlCreateChild ( xmlFile, "somesubnode" ) -- Create a new subnode
local success=xmlNodeSetValue(node,"somevalue") --Set the value of it
    local success = xmlNodeSetValue ( node, "somevalue" ) -- Set the value of it
if success then --Check if it was successful
    if success then -- Check if it was successful
xmlSaveFile(xmlFile) --Save the file
        xmlSaveFile ( xmlFile ) -- Save the file
end --End what still needs to be ended
    end
end
    xmlUnloadFile(xmlFile)
end
end
</syntaxhighlight>
</syntaxhighlight>
 
After both changing the value and saving the XML file with [[xmlSaveFile]], the file will look like this:
The xml file wil look like:
<section name="exampleFile.xml" class="server" show="true">
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<somenode>
<somenode>
Line 40: Line 39:
</somenode>
</somenode>
</syntaxhighlight>
</syntaxhighlight>
</section>
<section name="Client Example: Save and load from a clientside XML" class="client" show="true">
This shows an example of a clientside XML file. You can use this to store user preferences and load them the next time the script loads. Almost always, you should have an options GUI for clients to interact with to set these values.
<br/><br/>
Since the XML will change, it should NOT be included in the resource's meta.xml file. MTA will think that file is corrupted and will download it again from the server. Instead, you should create the XML within the script, and then load it within the script on future script runs if it exists.
'''This xml will be created from the script following it below'''
<syntaxhighlight lang="xml">
<root>
    <hud_display>
        <IconSizeX>60</IconSizeX>
        <IconSizeY>60</IconSizeY>
    </hud_display>
    <hud_binds>
        <weaponSlot0>tab</weaponSlot0>
        <weaponSlot1>1</weaponSlot1>
    </hud_binds>
</root>
</syntaxhighlight>
'''This script will create the xml or load it if it exists'''
<syntaxhighlight lang="lua">
function ClientResourceStart ()
xmlRootTree = xmlLoadFile ( "userSettings.xml" ) --Attempt to load the xml file
if xmlRootTree then -- If the xml loaded then...
xmlHudBranch = xmlFindChild(xmlRootTree,"hud_display",0) -- Find the hud sub-node
xmlBindsBranch = xmlFindChild(xmlRootTree,"hud_binds",0) -- Find the binds sub-node
outputChatBox ( "XML Found and Loaded" )
else -- If the xml does not exist then...
xmlRootTree = xmlCreateFile ( "userSettings.xml", "root" ) -- Create the xml file
xmlHudBranch = xmlCreateChild ( xmlRootTree, "hud_display" ) -- Create the hud sub-node under the root node
xmlBindsBranch = xmlCreateChild ( xmlRootTree, "hud_binds" )-- Create the binds sub-node under the root node
xmlNodeSetValue (xmlCreateChild ( xmlHudBranch, "IconSizeX"), "60" ) --Create sub-node values under the hud sub-node
xmlNodeSetValue (xmlCreateChild ( xmlHudBranch, "IconSizeY"), "60" ) --Create sub-node values under the hud sub-node
xmlNodeSetValue (xmlCreateChild ( xmlBindsBranch, "weaponSlot0"), "tab" ) --Create sub-node values under the binds sub-node
xmlNodeSetValue (xmlCreateChild ( xmlBindsBranch, "weaponSlot1"), "1" ) --Create sub-node values under the binds sub-node
outputChatBox ( "XML Created" )
end
--Retrieve a single sub-node name or value
outputChatBox( "Node name: "..xmlNodeGetName (xmlFindChild(xmlHudBranch,"IconSizeX",0)), 0, 0, 255 ) --blue outputs
outputChatBox( "Node Value: "..xmlNodeGetValue (xmlFindChild(xmlHudBranch,"IconSizeX",0)), 0, 0, 255 ) --blue outputs
        --Retrieve multiple sub-node names or values
xmlHudChildrenTable = xmlNodeGetChildren ( xmlHudBranch ) --Create a table of this branch's children
for i,node in pairs(xmlHudChildrenTable ) do --Loop through the branch's children for sub-nodes
            outputChatBox( "Node name: "..xmlNodeGetName (node), 0, 255, 0 ) --green outputs
    outputChatBox( "Node Value: "..xmlNodeGetValue(node), 0, 255, 0 ) --green outputs
end
end
addEventHandler ( "onClientResourceStart", resourceRoot, ClientResourceStart )
function ClientResourceStop ()
xmlSaveFile ( xmlRootTree ) --Save the xml from memory for use next time
xmlUnloadFile ( xmlRootTree ) --Unload the xml from memory
outputChatBox ( "Saved and unloaded the XML." )
end
addEventHandler ( "onClientResourceStop", resourceRoot, ClientResourceStop )
</syntaxhighlight>
</section>


==See Also==
==See Also==
{{FunctionArea_Functions}}
{{XML functions}}
{{XML_functions}}

Latest revision as of 20:52, 12 May 2019

This function is made to be able to assign values to tags in XML files (eg. <something>anything</something>).

Syntax

bool xmlNodeSetValue ( xmlnode theXMLNode, string value [, bool setCDATA = false] )            

OOP Syntax Help! I don't understand this!

Method: xmlnode:setValue(...)
Variable: .value
Counterpart: xmlNodeGetValue


Required Arguments

  • theXMLNode: The xml node you want to set the value of.
  • value: The string value you want the node to have.
ADDED/UPDATED IN VERSION 1.4.0 r6782:
  • setCDATA: A boolean indicating if you want the value to be enclosed inside CDATA tags.

Returns

Returns true if value was successfully set, false otherwise.

Example

Click to expand [+]
Server Example
Click to collapse [-]
Client Example: Save and load from a clientside XML

This shows an example of a clientside XML file. You can use this to store user preferences and load them the next time the script loads. Almost always, you should have an options GUI for clients to interact with to set these values.

Since the XML will change, it should NOT be included in the resource's meta.xml file. MTA will think that file is corrupted and will download it again from the server. Instead, you should create the XML within the script, and then load it within the script on future script runs if it exists.

This xml will be created from the script following it below

<root>
    <hud_display>
        <IconSizeX>60</IconSizeX>
        <IconSizeY>60</IconSizeY>
    </hud_display>
    <hud_binds>
        <weaponSlot0>tab</weaponSlot0>
        <weaponSlot1>1</weaponSlot1>
    </hud_binds>
</root>

This script will create the xml or load it if it exists

function ClientResourceStart ()
	xmlRootTree = xmlLoadFile ( "userSettings.xml" ) --Attempt to load the xml file	

	if xmlRootTree then -- If the xml loaded then...
		xmlHudBranch = xmlFindChild(xmlRootTree,"hud_display",0) -- Find the hud sub-node
		xmlBindsBranch = xmlFindChild(xmlRootTree,"hud_binds",0) -- Find the binds sub-node
		outputChatBox ( "XML Found and Loaded" )
	else -- If the xml does not exist then...
		xmlRootTree = xmlCreateFile ( "userSettings.xml", "root" ) -- Create the xml file	
		xmlHudBranch = xmlCreateChild ( xmlRootTree, "hud_display" ) -- Create the hud sub-node under the root node
		xmlBindsBranch = xmlCreateChild ( xmlRootTree, "hud_binds" )-- Create the binds sub-node under the root node
		xmlNodeSetValue (xmlCreateChild ( xmlHudBranch, "IconSizeX"), "60" ) --Create sub-node values under the hud sub-node
		xmlNodeSetValue (xmlCreateChild ( xmlHudBranch, "IconSizeY"), "60" ) --Create sub-node values under the hud sub-node
		xmlNodeSetValue (xmlCreateChild ( xmlBindsBranch, "weaponSlot0"), "tab" ) --Create sub-node values under the binds sub-node
		xmlNodeSetValue (xmlCreateChild ( xmlBindsBranch, "weaponSlot1"), "1" ) --Create sub-node values under the binds sub-node
		outputChatBox ( "XML Created" )
	end

	--Retrieve a single sub-node name or value
	outputChatBox( "Node name: "..xmlNodeGetName (xmlFindChild(xmlHudBranch,"IconSizeX",0)), 0, 0, 255 ) --blue outputs
	outputChatBox( "Node Value: "..xmlNodeGetValue (xmlFindChild(xmlHudBranch,"IconSizeX",0)), 0, 0, 255 ) --blue outputs
	
        --Retrieve multiple sub-node names or values	
	xmlHudChildrenTable = xmlNodeGetChildren ( xmlHudBranch ) --Create a table of this branch's children
	for i,node in pairs(xmlHudChildrenTable ) do --Loop through the branch's children for sub-nodes
            outputChatBox( "Node name: "..xmlNodeGetName (node), 0, 255, 0 ) --green outputs
	    outputChatBox( "Node Value: "..xmlNodeGetValue(node), 0, 255, 0 ) --green outputs
	end
end
addEventHandler ( "onClientResourceStart", resourceRoot, ClientResourceStart )
 
function ClientResourceStop ()
	xmlSaveFile ( xmlRootTree ) --Save the xml from memory for use next time
	xmlUnloadFile ( xmlRootTree ) --Unload the xml from memory
	outputChatBox ( "Saved and unloaded the XML." )
end
addEventHandler ( "onClientResourceStop", resourceRoot, ClientResourceStop )

See Also