2016-07-27 14 views
0

私はちょうど1日前にC#を使い始めましたが、これまでのところあまり問題はありませんでしたが、私はDispordのボットで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の一部です。私は、統計ノードをループして、statの名前とbase statの値を取得します。これまでに試したことはすべて、null例外エラーをスローします。どのようにしてxmlを正しく解析するかを理解しようとすると困ってしまい、どんな助けになっても大いに役立つはずです。また、私はXmlDocumentsで作業している余分な情報です。ここでは、IVEは、これまでに試したものを基本的にです:

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; 
} 

一時はタイプ突くのものであり、統計が、私はそれはそれで二つの文字列、STATの名前用とSTATの値のために別のものを持って作られただけのタイプです。私はXML文書から他のものに完全にうまくアクセスできましたが、同じ名前を持つノードから引き離すのに問題があります。

+0

何が失敗したのかを知るために、これまでに試したことについて少しお見せできますか?エラーが発生している箇所を指摘してください。それ以外の場合は、あなたが問題を抱えていることを知るのは難しいです。 –

+0

私は基本的に私が何をしたかを示すためにコードを編集しました。早速のご返事ありがとうございます! – Thomas

+0

私は基本的にこれをやろうとしました:http://stackoverflow.com/questions/14806661/looping-through-xml-documentしかし、私はこの記事よりも1つ下のレベルにアクセスする必要があります。 – Thomas

答えて

0

私はこれが正しい道にあなたを設定すると考えている:XPathの持つルート・ノードを参照するために、

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; 
} 

まず、あなたはダブルフォワードが//をスラッシュ必要です。次に、xmlNode.SelectSingleNode(string xPath)を使用する必要があります.Xpathにはスラッシュが先頭に付きません。

+0

まだNullReferenceExceptionをスローしているようです – Thomas

+0

どこにコードを投げていますか? –

+0

この行:temp.stats [count] .val = xmlNode.SelectSingleNode( "stat/name")。InnerText;これはtemp.stats [count ++]。num = xmlNode.SelectSingleNode( "base_stat")です。 – Thomas

関連する問題