Цикл Unity / C # через данные XML при нажатии кнопки - PullRequest
0 голосов
/ 06 января 2019

Я довольно новичок в программировании и Unity, и я надеюсь, что кто-то может помочь мне найти решение.

У меня есть XML-файл с данными ниже. Я хочу отображать статистику одной команды за раз, а затем, когда пользователь нажимает кнопку, я бы хотел, чтобы скрипт циклически переходил к следующему узлу команды в файле XML и отображал информацию этой команды. Любая помощь будет принята с благодарностью!

<roster>
    <team>
            <id>0</id>
            <teamname>Atlanta Seagulls</teamname>
            <overall>90</overall>
            <offense>74</offense>
            <defense>98</defense>
    </team>

    <team>
            <id>1</id>
            <teamname>Minnesota Trees</teamname>
            <overall>68</overall>
            <offense>58</offense>
            <defense>73</defense>
    </team>

    <team>
            <id>2</id>
            <teamname>Denver Mountains</teamname>
            <overall>50</overall>
            <offense>39</offense>
            <defense>74</defense>
    </team>

Вот что у меня есть для моего C # скрипта.

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

public class LoadXML : MonoBehaviour {

    public TextAsset xmlRawFile;
    public Text uiText;
    public int nodeCount;
    public int index;
    public int teamId;
    public Text teamIdTest;

    // Use this for initialization
void Start () {
    string data = xmlRawFile.text;
    parseXmlFile (data);
}

void parseXmlFile(string xmlData)
{
    string totalVal = "";
    XmlDocument xmlDoc = new XmlDocument ();
    xmlDoc.Load (new StringReader (xmlData));
    string xmlPathPattern = "//roster/team";
    XmlNodeList myNodeList = xmlDoc.SelectNodes (xmlPathPattern);
    nodeCount = myNodeList.Count;



    for (int i = 0; i < nodeCount; i++) 
        {
            if (i == index) 
            {

                foreach (XmlNode node in myNodeList) 
                {
                    XmlNode id = node.FirstChild;
                    XmlNode teamname = id.NextSibling;
                    XmlNode overall = teamname.NextSibling;
                    XmlNode offense = overall.NextSibling;
                    XmlNode defense = offense.NextSibling;



                    teamIdTest.text = id.InnerXml;
                    teamId = Int32.Parse (id.InnerXml);

                if (teamId == i) 
                    {

                        totalVal = " Team Name: " + teamname.InnerXml + "\nOverall: " + overall.InnerXml + "\nOffense : " + offense.InnerXml + "\nNodes : " + nodeCount + "\n\n";
                        uiText.text = totalVal;
                    }
                }
            }
        }

}
public void Swap()
{
    if (index < nodeCount - 1) {
        index++;
    } else {
        index = 0;
    }
}

}

1 Ответ

0 голосов
/ 06 января 2019

Например, вы можете прочитать файл и сохранить значения каждой команды в массиве XmlNodes. Этот код может преобразовать список узлов в массив:

XmlNode[] nodeArray = myNodeList.Cast<XmlNode>().ToArray();

Затем, когда пользователь нажимает кнопку, вы выбираете следующий элемент из массива и делаете свои вещи:

public void SwapNext()
{
//nodeArray and currentNodeIndex  should be private class variables so you can reach them from all class functions
currentNodeIndex += 1 ;
node = nodeArray[currentNodeIndex];
XmlNode id = node.FirstChild;
XmlNode teamname = id.NextSibling;
XmlNode overall = teamname.NextSibling;
XmlNode offense = overall.NextSibling;
XmlNode defense = offense.NextSibling;

teamIdTest.text = id.InnerXml;
teamId = Int32.Parse (id.InnerXml);

totalVal = $"Team Name: {teamname.InnerXml} Overall {overall.InnerXml} Offense : {offense.InnerXml} Nodes {nodeCount}";
uiText.text = totalVal;

Вы также можете анализировать весь файл сразу, как сейчас, и сохранять значения команд как объект некоторого класса, например, класса Team, а затем использовать массив объекта Team вместо XmlNode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...