- Home /
Parse XML file in Unity C#
I have a little problem with parsing XML file to object in C#. Whole project is in Unity3D. So I have this XML file:
<Questions>
<Question>
<questionText>What is this?</questionText>
<answer>blablabla</answer>
</Question>
</Questions>
And this is my parsing class:
using UnityEngine;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System;
public struct Montage {
[XmlElement("questionText")]
public string questionText;
[XmlElement("answer")]
public string answer;
}
[XmlRoot("Questions"), XmlType("Questions")]
public class ConfigScene {
[XmlArray("Questions")]
[XmlArrayItem("Question")]
public List<Montage> questions = new List<Montage> ();
public static ConfigScene Load(string path) {
try {
XmlSerializer serializer = new XmlSerializer (typeof(ConfigScene));
using(FileStream stream = new FileStream(path, FileMode.Open)) {
return serializer.Deserialize(stream) as ConfigScene;
}
} catch (Exception e) {
UnityEngine.Debug.LogError ("Exception loading config file: " + e);
return null;
}
}
}
I'm calling this "Load" method in camera Object in Start() method:
void Start () {
confScene = ConfigScene.Load(Path.Combine(Application.dataPath, "Config/config2.xml"));
foreach(Montage o in confScene.questions) {
Debug.Log (o.questionText);
}
}
The problem is that my questions list is empty and I didn't get any provided data into it. Do I make something wrong? Maybe someone made it before and know what is wrong with this code?
Answer by janus007 · Sep 26, 2016 at 04:57 PM
Use this to get the correct object graph: http://xmltocsharp.azurewebsites.net/
Answer by Madhur26 · Dec 20, 2017 at 08:58 AM
public TextAsset xmlRawFile;
public Text uiText;
// Use this for initialization
void Start () {
string data = xmlRawFile.text;
parseXmlFile (data);
}
void parseXmlFile(string xmlData){
string totVal = "";
XmlDocument xmlDoc = new XmlDocument ();
xmlDoc.Load (new StringReader (xmlData));
string xmlPathPattern = "//Questions/Question";
XmlNodeList myNodeList = xmlDoc.SelectNodes (xmlPathPattern);
foreach (XmlNode node in myNodeList)
{
XmlNode questionText= node.FirstChild;
XmlNode answer= questionText.NextSibling;
totVal += "questionText: " +Name.InnerXml+"\n answer: " +Tag.InnerXml+"\n\n";
Debug.Log ("List" + totVal);
uiText.text = totVal;
}
}
Your answer
Follow this Question
Related Questions
How do I make this XML file parser work in Unity 1 Answer
Invalid Encoding Specification Xml 1 Answer
Confusion with process of XML setup 0 Answers
unity and xml question 1 Answer
Parse XML to Vector3 (and other objects you don't control) 0 Answers