首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过iteration c#访问Xml节点

通过iteration c#访问Xml节点
EN

Stack Overflow用户
提问于 2016-07-28 00:53:13
回答 1查看 228关注 0票数 0

所以我大约一天前才开始使用c#,到目前为止还没有遇到太多的问题,但我正在开发一个针对不一致的机器人,它可以从一个应用程序接口中提取口袋妖怪的信息。我目前正忙于遍历xml。下面是我正在尝试使用的xml的一部分:

代码语言:javascript
复制
<?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合作。到目前为止,我基本上是这样尝试的:

代码语言:javascript
复制
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文档中的其他内容,但是在从共享相同名称的节点中提取数据时遇到了麻烦。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-28 01:19:50

我相信这会让你走上正确的道路:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38619013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档