- Home /
Need Help Serializing/Deserializing XML
I'm rather new to parsing XML, though I think I'm getting close to a working system. I'm currently having 2 problems:
1) I'm using the web player, so I need to know exactly how I would format my directory (path) to point to the xml file on the webserver.
2) How exactly do I use the data after it has been deserialized? I have seen a couple of tutorials that just say "use this" and offer a few lines of code without actually explaining the components.
XML Sample:
<questions>
<question>
<name id="1">Question 1</name>
<body>What is the maximum length of a 10BaseT cable?</body>
<answers>
<answer correct="false">50 Meters</answer>
<answer correct="false">100 Meters</answer>
<answer correct="false">50 Feet</answer>
<answer correct="true">100 Feet</answer>
</answers>
</question>
<question>
<name id="2">Question 2</name>
<body>What layer of the OSI 7 Layer Model does a router work at?</body>
<answers>
<answer correct="false">Layer 10</answer>
<answer correct="true">Layer 3</answer>
<answer correct="false">Layer 1</answer>
<answer correct="false">Layer 4</answer>
</answers>
</question>
</questions>
XML Parser: using System.Xml.Serialization;
namespace QuestionSerializer{
[XmlRoot(ElementName = "questions")]
public class Questions //load the root into a class
{
[XmlElement(ElementName = "question")]
public Question[] Question { get; set; } //load question elements into array for later use
}
public class Question
{
[XmlAttribute(AttributeName = "id")]
public int Id { get; set; }
[XmlElement(ElementName = "body")]
public string Body { get; set; }
[XmlArray("answers")]
[XmlArrayItem("answer")]
public Answer [] Answers { get; set; }
}
public class Answer
{
[XmlAttribute(AttributeName = "correct")]
public bool Correct { get; set; }
}
}
Loading XML:
using System;
using System.IO;
using System.Xml.Serialization;
using UnityEngine;
using QuestionSerializer;
public class LoadXMLDoc : MonoBehaviour {
private Questions questions;
void LoadXML(string path)
{
XmlSerializer serial = new XmlSerializer(typeof(Questions));
Stream reader = new FileStream(path, FileMode.Open);
questions = (Questions)serial.Deserialize(reader) as Questions;
}
}
Usage (where I'm having my problems:
using UnityEngine;
using System.Collections;
public class DisplayQuestions : MonoBehaviour {
// Use this for initialization
void Start () {
//really bad usage 1
Debug.Log("Question 1: " + LoadXMLDoc.LoadXML(FindPath).Question[0]);
}
IEnumerator FindPath()
{
//really bad usage 2
www = new WWW(Path.Combine(Application.dataPath, "TestQuestions.xml"));
yield return www;
monsterCollection = MonsterContainer.LoadFromText(www.text);
}
}
Thanks in advance.
Comment