簡體   English   中英

需要幫助清理我的XML解析器代碼

[英]Need help cleaning up my XML parser code

因此,我試圖使自己熟悉XML。 為此,我創建了一個簡單的XML文件,然后創建了一個C#腳本來讀取該XML文件。 現在一切都按預期工作,但是代碼感覺很糟糕。

我的XML如下所示:

<buildings>
    <building>
        <name>House</name>
        <buildTime>5</buildTime>
        <treeCost>100</treeCost>
        <stoneCost>10</stoneCost>
        <goldCost>10</goldCost>
    </building>

    <building>
        <name>Tower</name>
        <buildTime>5</buildTime>
        <treeCost>10</treeCost>
        <stoneCost>300</stoneCost>
        <goldCost>50</goldCost>
    </building>
</buildings>

我的C#代碼如下所示:

    XDocument xmlDoc = XDocument.Load ("BuildingGame_Data/Buildings.xml");

    var names = xmlDoc.Descendants("building").Descendants("name");
    var buildTimes = xmlDoc.Descendants("building").Descendants("buildTime");
    var treeCosts = xmlDoc.Descendants("building").Descendants("treeCost");
    var stoneCosts = xmlDoc.Descendants("building").Descendants("stoneCost");
    var goldCosts = xmlDoc.Descendants("building").Descendants("goldCost");

    List<string> namesList = new List<string>();
    List<int> buildTimesList = new List<int>();
    List<int> treeCostsList = new List<int>();
    List<int> stoneCostsList = new List<int>();
    List<int> goldCostsList = new List<int>();

    foreach (string n in names)
    {
        namesList.Add(n);
    }

    foreach (string b in buildTimes)
    {
        buildTimesList.Add(System.Convert.ToInt32(b));
    }

    foreach (string t in treeCosts)
    {
        treeCostsList.Add(System.Convert.ToInt32(t));
    }

    foreach (string s in stoneCosts)
    {
        stoneCostsList.Add(System.Convert.ToInt32(s));
    }

    foreach (string g in goldCosts)
    {
        goldCostsList.Add(System.Convert.ToInt32(g));
    }


    List<Building> buildings = new List<Building>();
    for (int i = 0; i < namesList.Count; i++)
    {
        buildings.Add(new Building(namesList[i], buildTimesList[i], treeCostsList[i], stoneCostsList[i], goldCostsList[i]));
    }

現在,我想要一種跳過中間部分的方法,該部分將轉換所有XML數據並將其存儲在不同的列表中。 這似乎是一個不必要的步驟,但是我無法使其以任何其他方式起作用。

一旦有了后代,只需執行一次選擇即可將xml映射到您的類。 您可以使用Element獲取“建築物”的子元素,並將其轉換為正確的值。

var buildings = xmlDoc.Descendants("building")
                      .Select(be => new Building (
                          (string)be.Element("name"),
                          (int)be.Element("buildTime"),
                          (int)be.Element("treeCost"),
                          (int)be.Element("stoneCost"),
                          (int)be.Element("goldCost")))
                      .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM