Разбор XML метаданных, содержащих условные операторы с C# в Unity - PullRequest
0 голосов
/ 10 апреля 2020

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

<BENEvents>

  <BENDescisionQ1 flagBEN_00="true" flagBEN_01="true" flagBEN_28="true" flagBEN_29="false">
    <AskQuestions caption='Looking today again at you glass with milk you decide....'>
        <Question event='DescisionQ1Yes'>Cowcostumes look great.</Question>
        <Question event='DescisionQ1No'>Flatnesss is justice, so NO</Question>
    </AskQuestions>
  </BENDescisionQ1>

  <BENDescisionQ2 ....>
    .....
  </BENDescisionQ2>

<BENEvents>

Пожалуйста, помогите указать мне правильное направление.

1 Ответ

0 голосов
/ 10 апреля 2020

Это не простой Xml Разбор. Смотрите мое Xml решение Linq с использованием Regex

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            BenEvent benEvent = new BenEvent();
            benEvent.parse(FILENAME);
        }
    }
    public class BenEvent
    {
        public static List<BenEvent> listEvents = new List<BenEvent>();
        public int number { get; set; }
        public List<KeyValuePair<int, Boolean>> flags { get; set; }
        public string question { get; set; }
        public List<KeyValuePair<string, string>> answers { get; set; }

        string patternNumber = @"\d+$";
        string patternYesNo = @"[^\d]+$";
        public void parse(string filename)
        {
            XDocument doc = XDocument.Load(filename);
            XElement benEvents = doc.Descendants("BENEvents").FirstOrDefault();
            foreach (XElement descision in benEvents.Elements())
            {
                BenEvent newEvent = new BenEvent();
                listEvents.Add(newEvent);
                newEvent.number = int.Parse(Regex.Match(descision.Name.LocalName, patternNumber).Value);
                newEvent.flags = descision.Attributes()
                    .Select(x => new KeyValuePair<int, Boolean>(int.Parse(Regex.Match(x.Name.LocalName, patternNumber).Value), (Boolean)x)).ToList();
                newEvent.question = (string)descision.Element("AskQuestions").Attribute("caption");
                newEvent.answers = descision.Descendants("Question")
                    .Select(x => new KeyValuePair<string, string>(Regex.Match((string)x.Attribute("event"), patternYesNo).Value, (string)x)).ToList();
            }
        }
    }
}
...