我在将一些 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/