0

我将如何使用 Linq 获取 ID 信息。我正在尝试将它们添加到 int 数组中。

  <FactionAttributes>
    <name>Player</name>
    <id>0</id>
    <relationModifier>1</relationModifier>
    <relations>
        <id0>100</id0>
        <id1>50</id1>
        <id2>50</id2>
        <id3>50</id3>
        <id4>50</id4>
        <id5>50</id5>
    </relations>
  </FactionAttributes>

那是我的 XML。

这是我到目前为止使用的代码。

    void InitFactions()
        {
            int count = 0;
            string filepath = Application.dataPath + "/Resources/factiondata.xml";
            XDocument factionXML = XDocument.Load(filepath);

            var factionNames = from factionName in factionXML.Root.Elements("FactionAttributes")
                select new {
                    factionName_XML = (string)factionName.Element("name"),
                    factionID_XML = (int)factionName.Element("id"),
                    factionRelations_XML = factionName.Element("relations")// Need to turn this into array.
            };

            foreach ( var factionName in factionNames)
                ++count;

            foreach ( var factionName in factionNames)
            {
                Factions f = new Factions();            
                f.otherFactionsName = new string[count];
                f.otherFactionsRelation = new int[count];
                int others = 0;

                f.FactionName = factionName.factionName_XML;

                Debug.Log(factionName.factionRelations_XML);

                // Adds Rivals, not self to other list.
                foreach (var factionName2 in factionNames)
                {
                    if (factionName.factionID_XML == factionName2.factionID_XML)
                        continue;
                    f.otherFactionsName[(int)factionName2.factionID_XML] = factionName2.factionName_XML;

// THIS IS WHERE IM ADDING THE RELATIONS IN //
                    f.otherFactionsRelation[(int)factionName2.factionID_XML] = factionName.factionRelations_XML[(int)factionName2.factionID_XML];
                    Debug.Log(f.FactionName + " adds: " + factionName2.factionName_XML);
                    ++others;
                }
            }
        }

我已经使用节点进行了多次尝试,但没有。我似乎无法弄清楚正确的语法。

4

2 回答 2

0

如果您只是在关系 ID 之后使用这个简单的查询

var doc = XDocument.Load("c:\\tmp\\test.xml");
var ids = doc.Descendants("relations").Elements().Select(x => x.Value);

如果您想要一个数组中的 ID 和关系 ID,请使用此

var id = doc.Descendants("id").Select(x=>x.Value).Concat(doc.Descendants("relations").Elements().Select(x => x.Value));
于 2013-06-06T20:20:33.333 回答
0
XDocument doc = XDocument.Load(Path);

//To get <id>
var MyIds = doc.Element("FactionAttributes").Element("id").Value;

//To get <id0>, <id1>, etc.
var result = doc.Element("FactionAttributes")
                .Element("relations")
                .Elements()
                .Where(E => E.Name.ToString().Contains("id"))
                .Select(E => new { IdName = E.Name, Value = E.Value});

如果你想要整数数组,用这个替换选择

.Select(E => Convert.ToInt32(E.Value)).ToArray();
于 2013-06-06T20:14:43.073 回答