2016-07-27 172 views
0

所以我剛剛開始使用c#大約一天前,並沒有太多的問題,但目前爲止我正在爲Discord的機器人工作,它將從api中提取口袋妖怪信息。我目前正在通過xml遍歷。這裏的XML我想一起工作的一部分:通過迭代訪問Xml節點c#

<?xml version="1.0" encoding="UTF-8"?> 
    <root> 
     <stats> 
      <stat> 
       <url>https://pokeapi.co/api/v2/stat/6/</url> 
       <name>speed</name> 
      </stat> 
      <effort>0</effort> 
      <base_stat>100</base_stat> 
     </stats> 
    </root> 

這基本上是我的XML文檔的刪節版,但也有對「統計」的多個節點。我想循環統計節點並且拉出統計的名字和基礎統計的值。我迄今爲止所嘗試的所有內容都會引發一個空的異常錯誤。我無法理解如何正確解析xml,所以任何幫助都會大大受到重視。也只是爲了額外的信息,我正在使用XmlDocuments。這裏的基本上是香港專業教育學院試過到目前爲止:

XmlDocument pokemon = new XmlDocument(); 
pokemon.Load("c:\\document.xml"); 
XmlNodeList xmlNodes = pokemon.SelectNodes("/root/stats"); 
int count = 0; 
foreach (XmlNode xmlNode in xmlNodes) 
{ 
    temp.stats[count].val = xmlNode["/stat/name"].InnerText; 
    temp.stats[count++].num = xmlNode["base_stat"].InnerText; 
} 

溫度是類型戳和統計僅僅是一個類型的我做了一個其中有兩個字符串,一個用於統計的名稱,另一個用於統計的價值。我能夠很好地從xml文檔訪問其他東西,但是我無法從共享相同名稱的節點拉取。

+0

你能否展示一下你到目前爲止已經嘗試過的一些內容,以便我們瞭解什麼是失敗?指出錯誤發生的地方?否則很難知道你有什麼問題。 –

+0

我編輯的代碼基本上顯示了我做了什麼。感謝您及時的回覆! – Thomas

+0

我基本上試圖做到這一點:http://stackoverflow.com/questions/14806661/looping-through-xml-document,但我需要訪問比這篇文章顯示低一級。 – Thomas

回答

0

我相信這將設置你在正確的道路上:

XmlNodeList xmlNodes = pokemon.SelectNodes(@"//root/stats"); 
int count = 0; 

foreach (XmlNode xmlNode in xmlNodes) 
{ 
    temp.stats[count].val = xmlNode.SelectSingleNode("stat/name").InnerText; 
    temp.stats[count++].num = xmlNode.SelectSingleNode("base_stat").InnerText; 
} 

首先,參考使用XPath根節點,你需要雙斜槓//。其次,你需要使用xmlNode.SelectSingleNode(string xPath),你的XPath不應該有前導斜槓。

+0

似乎仍在拋出NullReferenceException – Thomas

+0

它在哪裏拋出它(代碼中的哪一行)? –

+0

this line:temp.stats [count] .val = xmlNode.SelectSingleNode(「stat/name」)。InnerText;和這一個:temp.stats [count ++]。num = xmlNode.SelectSingleNode(「base_stat」)。InnerText; – Thomas