[英]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.