所以我大约一天前才开始使用c#,到目前为止还没有遇到太多的问题,但我正在开发一个针对不一致的机器人,它可以从一个应用程序接口中提取口袋妖怪的信息。我目前正忙于遍历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文档的一个简化版本,但是"stats“有多个节点。我希望循环stats节点,并提取stat的名称和base stat的值。到目前为止,我尝试过的所有操作都抛出了一个空异常错误。我在尝试理解如何正确解析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文档中的其他内容,但是在从共享相同名称的节点中提取数据时遇到了麻烦。
发布于 2016-07-28 01:19:50
我相信这会让你走上正确的道路:
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不应该有前导正斜杠。
https://stackoverflow.com/questions/38619013
复制相似问题