c# - XML 阅读器未正确读取子节点

标签 c# xml windows-8 windows-runtime

我在将一些 XML 读入 Windows 8 商店应用程序时遇到问题。

我有一些具有多个父节点和子节点的 XML,我只需要读取其中一个节点并将其全部连接成一个字符串。我尝试了很多不同的方法让它循环遍历两个父节点并从需要读取数据的单个子节点中提取数据。我正在使用 XmlReader 类,因为这是最简单的阅读方式,不会出现太多问题。

这是我正在尝试读取的 XML:

<platforms>
<platform>
<api_detail_url>
<![CDATA[ http://www.giantbomb.com/api/platform/3045-20/ ]]>
</api_detail_url>
<id>20</id>
<name>
<![CDATA[ Xbox 360 ]]>
</name>
<site_detail_url>
<![CDATA[ http://www.giantbomb.com/xbox-360/3045-20/ ]]>
</site_detail_url>
<abbreviation>
<![CDATA[ X360 ]]>
</abbreviation>
</platform>
<platform>
<api_detail_url>
<![CDATA[ http://www.giantbomb.com/api/platform/3045-86/ ]]>
</api_detail_url>
<id>86</id>
<name>
<![CDATA[ Xbox Live Marketplace ]]>
</name>
<site_detail_url>
<![CDATA[
http://www.giantbomb.com/xbox-live-marketplace/3045-86/
]]>
</site_detail_url>
<abbreviation>
<![CDATA[ XBLM ]]>
</abbreviation>
</platform>
</platforms>

这是我目前的阅读尝试:

if(reader.ReadToDescendant("platform"))
{
    do
    {
        i++;
        reader.ReadToDescendant("name");
        reader.ReadStartElement("name");
        gPlat = gPlat + reader.Value + Environment.NewLine;
        reader.ReadToFollowing("platform");
    }
    while (reader.ReadToNextSibling("platform"));
}

如果它在 do/while 循环中有任何其他类型的阅读器函数/方法,我似乎无法让它循环遍历两个“平台”节点,如果我将它留空,它可以很好地循环,没有任何问题( i 变量用于测试这个)

我的目标是将两个名称子节点作为值的串联字符串,但它只循环一次,完全跳过第二个“名称”节点。我无法更改 XML,因为它是由 Web API 返回的。

非常感谢任何帮助。

最佳答案

你为什么不使用 linq?

第一项:

XDocument doc = XDocument.Parse(xml);
var name = doc.Root
           .Elements("platform")
           .Select(x => x.Element("name").Value)
           .First();

所有项目:

XDocument doc = XDocument.Parse(xml);
var platforms = doc.Root
           .Elements("platform")
           .Select(x => x.Element("name").Value)
           .ToList();

关于c# - XML 阅读器未正确读取子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16594180/

相关文章:

xml - 有什么办法可以在 Linux 中将两个 xml 合并为一个 xml

jquery - Windows 8 共享目标与 JQuery 崩溃

c# - 您应该在 Windows 8 应用程序的哪个位置编码 'privacy policy' ?

c# - 如何在 C# DataTable 中使用 sql 聚合函数

C# OpenXml 选择性字体加粗

php - SimpleXML 能否只加载 XML 的一部分?

windows-8 - 用户 '' 没有所需的权限,Windows 8 上的 SSRS 2008

c# - SetCommandTimeout 的执行不适用于 PostgreSQL 的 EF Core 5

c# - 为什么集合初始化抛出 NullReferenceException

java - 如何在 Java 9 中创建没有外部库的 XML 文件?