所以我刚刚开始使用c#一天前到目前为止还没有太多问题,但是我正在为Discord开发一个机器人,它会从api中提取口袋妖怪信息。我目前仍然坚持遍历xml。这是我尝试使用的xml的一部分:
<?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文档的删节版本,但有&#34; stats&#34;有多个节点。我想循环统计节点并拉出stat的名称和base stat的值。到目前为止,我尝试的所有内容都会抛出一个null异常错误。我无法理解如何正确解析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;
}
temp属于poke类型,stats只是我制作的类型,其中包含两个字符串,一个用于stat的名称,另一个用于stat的值。我能够从xml文档中完全正常地访问其他内容,但是我在从具有相同名称的节点中拉出时遇到了麻烦。
答案 0 :(得分: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不应该有前导斜杠。