unity to php to XML files

Hi,

i’ve done this>> screenshot

so i get some idea how the thing works.
I need to do another to save an XML file…here the code to create the xml:

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Text;

public class _GameSave : MonoBehaviour
{
    // An example where the encoding can be found is at
    // http://www.eggheadcafe.com/articles/system.xml.xmlserialization.asp
    // We will just use the KISS method and cheat a little and use
    // the examples from the web page since they are fully described

    // This is our local private members
    bool _ShouldSave, _ShouldLoad, _SwitchSave, _SwitchLoad;
    string _FileLocation, _FileName;

    List<SaveStructure.GameItems> _GameItems;
    GameObject[] bodies;
    string _data = string.Empty;
	Vector3 VPosition;
	Vector3 VRotation;
	//public WWWForm form = new WWWForm();
	//public string url = _FileLocation;
	
    void Awake()
    {
        _GameItems = new List<SaveStructure.GameItems>();
    }

    // When the EGO is instansiated the Start will trigger
    // so we setup our initial values for our local members
    void Start()
    {
      //  _FileLocation = "http://www.deddytati.com/unity/webplayer/xmlParser2.php";
		_FileLocation = Application.dataPath+"/";
		_FileName = "saveData.xml";
    }

    void Update() { }

//	bool isSaving = false;
	
    void OnGUI()
    {
      
        //***************************************************
        // Saving The Player...
        // **************************************************   
		
			//	isSaving=true;
                bodies = FindObjectsOfType(typeof(GameObject)) as GameObject[];
                _GameItems = new List<SaveStructure.GameItems>();
                SaveStructure.GameItems itm;
                foreach (GameObject body in bodies)
                {
                    itm = new SaveStructure.GameItems();
                    itm.ID = body.name + "_" + body.GetInstanceID();
                    itm.Name = body.name;
                    itm.posx = body.transform.position.x;
                    itm.posy = body.transform.position.y;
                    itm.posz = body.transform.position.z;
                    itm.rotx = body.transform.eulerAngles.x;
                    itm.roty = body.transform.eulerAngles.y;
                    itm.rotz = body.transform.eulerAngles.z;
                    _GameItems.Add(itm);
                }
           
                // Time to creat our XML!
                _data = SerializeObject(_GameItems);
               
                CreateXML();
                Debug.Log("Data Saved");
 
        }
 
    /* The following metods came from the referenced URL *//*
    string UTF8ByteArrayToString(byte[] characters)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        string constructedString = encoding.GetString(characters);
        return (constructedString);
    }

    byte[] StringToUTF8ByteArray(string pXmlString)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] byteArray = encoding.GetBytes(pXmlString);
        return byteArray;
    }

    // Here we serialize our UserData object of myData
    string SerializeObject(object pObject)
    {
        string XmlizedString = null;
        MemoryStream memoryStream = new MemoryStream();
        XmlSerializer xs = new XmlSerializer(typeof(List<SaveStructure.GameItems>));
        XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
        xs.Serialize(xmlTextWriter, pObject);
        memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
        XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
        return XmlizedString;
    }

    // Here we deserialize it back into its original form
    object DeserializeObject(string pXmlizedString)
    {
        XmlSerializer xs = new XmlSerializer(typeof(List<SaveStructure.GameItems>));
        MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
        return xs.Deserialize(memoryStream);
    }

    // Finally our save and load methods for the file itself
    void CreateXML()
    {
        StreamWriter writer;
        FileInfo t = new FileInfo(_FileLocation + "/" + _FileName);
        if (!t.Exists)
        {
            writer = t.CreateText();
        }
        else
       {
//            t.Delete();
            writer = t.CreateText();
        }
        writer.Write(_data);
        writer.Close();
        Debug.Log("File written.");
    }
}
    /*void LoadXML()
    {
        if (File.Exists(_FileLocation + "/" + _FileName))
        {
            StreamReader r = File.OpenText(_FileLocation + "/" + _FileName);
            string _info = r.ReadToEnd();
            r.Close();
            // notice how I use a reference to type (UserData) here, you need this
            // so that the returned object is converted into the correct type
            _GameItems =(List<SaveStructure.GameItems>)DeserializeObject(_info);
            Debug.Log("File Read with item count: " + _GameItems.Count);
        }
        else
        {
            Debug.Log("Files does not exist: " + _FileLocation + "/" + _FileName);
        }
    }
}*/

and the question is how i can integrate the **write xml part** to the part where it **send the info a php** file to create an XML file in the server.

p/s:the code for the screenshot is in javascript while the write xml part in c#.

Your trying to write the xml to the local filesystem which will never work in the webplayer.
You will need to send the XML as a string to PHP through www.

yeah…as i said i get some of the idea on how it work…
but the documentation with the WWWForm were all in Javascript…
kinda makes it hard for me because i’m using c#.
if theres any hints how to change my codes to works with the www pls do tell…

In the script reference you can switch the examples from JS to C# for almost all examples.
Simply send your xml string to PHP using the WWW class.

by all means i’ve tried and there were no close enough C# references in the documentation for WWW class to what i’m trying to do.
I’m asking if someone can give some example in C# like how you say it :

and maybe throw in some quick explanation.

		WWWForm form = new WWWForm ();
		form.AddField ("fieldname", "string value");
		WWW w = new WWW ("PHP url", form);
		yield return w;

ok…
i’ll try to understand this tonight…
i’ll post my codes if have any problem.
THANKS!

ok…
this is what i’ve come up so far:

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Text;


public class POST : MonoBehaviour 
{
	// An example where the encoding can be found is at
    // http://www.eggheadcafe.com/articles/system.xml.xmlserialization.asp
    // We will just use the KISS method and cheat a little and use
    // the examples from the web page since they are fully described

    // This is our local private members
    bool _ShouldSave, _ShouldLoad, _SwitchSave, _SwitchLoad;
    string _FileLocation, _FileName;

    List<SaveStructure.GameItems> _GameItems;
    GameObject[] bodies;
    string _data = string.Empty;
	Vector3 VPosition;
	Vector3 VRotation;

    void Awake()
    {
        _GameItems = new List<SaveStructure.GameItems>();
    }
	
	void Start() 
	{
		string url="http://www.deddytati.com/unity/webplayer/xml.php";
		_FileLocation = url;
		_FileName = "saveData.xml";
		WWWForm form = new WWWForm();
		form.AddField("action","Upload XML");
		[COLOR="red"][I][B]form.AddBinaryData("fileupload",byte[] byteArray ,"Layout.xml","application/xml");[/B][/I] [/COLOR]
		WWW www = new WWW(url,form);
		StartCoroutine(WaitForRequest(www));
	}
	
	 void Update() { }

//	bool isSaving = false;
	
    void OnGUI()
    {
      
        //***************************************************
        // Saving The Player...
        // **************************************************   
		
			//	isSaving=true;
                bodies = FindObjectsOfType(typeof(GameObject)) as GameObject[];
                _GameItems = new List<SaveStructure.GameItems>();
                SaveStructure.GameItems itm;
                foreach (GameObject body in bodies)
                {
                    itm = new SaveStructure.GameItems();
                    itm.ID = body.name + "_" + body.GetInstanceID();
                    itm.Name = body.name;
                    itm.posx = body.transform.position.x;
                    itm.posy = body.transform.position.y;
                    itm.posz = body.transform.position.z;
                    itm.rotx = body.transform.eulerAngles.x;
                    itm.roty = body.transform.eulerAngles.y;
                    itm.rotz = body.transform.eulerAngles.z;
                    _GameItems.Add(itm);
                }
           
                // Time to creat our XML!
                _data = SerializeObject(_GameItems);
               
                CreateXML();
                Debug.Log("Data Saved");
 
        }
 
    /* The following metods came from the referenced URL */
    string UTF8ByteArrayToString(byte[] characters)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        string constructedString = encoding.GetString(characters);
        return (constructedString);
    }

    byte[] StringToUTF8ByteArray(string pXmlString)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] byteArray = encoding.GetBytes(pXmlString);
        return byteArray;
    }

    // Here we serialize our UserData object of myData
    string SerializeObject(object pObject)
    {
        string XmlizedString = null;
        MemoryStream memoryStream = new MemoryStream();
        XmlSerializer xs = new XmlSerializer(typeof(List<SaveStructure.GameItems>));
        XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
        xs.Serialize(xmlTextWriter, pObject);
        memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
        XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
        return XmlizedString;
    }

    // Here we deserialize it back into its original form
    object DeserializeObject(string pXmlizedString)
    {
        XmlSerializer xs = new XmlSerializer(typeof(List<SaveStructure.GameItems>));
        MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
        return xs.Deserialize(memoryStream);
    }

    // Finally our save and load methods for the file itself
    void CreateXML()
    {
        StreamWriter writer;
        FileInfo t = new FileInfo(_FileLocation + "/" + _FileName);
        if (!t.Exists)
        {
            writer = t.CreateText();
        }
        else
       {
//            t.Delete();
            writer = t.CreateText();
        }
        writer.Write(_data);
        writer.Close();
        Debug.Log("File written.");
    }

	
	IEnumerator WaitForRequest(WWW www)
	{
		yield return www;
		if (www.error == null)
		{
            Debug.Log("WWW Ok!: " + www.text);
        } 
		else 
		{
            Debug.Log("WWW Error: "+ www.error);
        }    
    }    
}

but i’m keep getting an error on theRED BOLD line.
Assets/Standard Assets/Scripts/saveLoad/POST.cs(43,53): error CS1525: Unexpected symbol [', expecting .’

any helps here?

byte[ ] byteArray is your problem…

byte[] byteArray;
form.AddBinaryData("fileupload", byteArray ,"Layout.xml","application/xml");

i’m getting error CS0165: Use of unassigned local variable `byteArray’

for

yep, you need to fill the byte array with your data.